ReentrantLock
![](https://cdn.codegym.cc/images/article/ee2cd199-b06a-4310-93c0-67f113b8ba93/1024.jpeg)
เงื่อนไข - การใช้เงื่อนไขในการล็อคช่วยให้คุณสามารถควบคุมการจัดการการเข้าถึงสตรีมได้ เงื่อนไขการล็อคเป็นวัตถุของ อินเตอร์เฟส Conditionจากjava.util.concurrent.locks การใช้ วัตถุเงื่อนไขมีหลายวิธีคล้ายกับการใช้เมธอดwait/แจ้งเตือน/แจ้งเตือนทั้งหมดคลาส Objectซึ่งได้กล่าวถึงในหัวข้อก่อนหน้านี้
Lockเป็นอินเทอร์เฟซจากกรอบการล็อกที่ให้แนวทางที่ยืดหยุ่นในการจำกัดการเข้าถึงทรัพยากร/บล็อก เมื่อเทียบกับการซิงโครไนซ์ เมื่อใช้ล็อคหลายตัว ลำดับการปลดล็อคสามารถกำหนดได้ตามอำเภอใจ อีกทั้งยังสามารถกำหนดค่าได้อีกด้วย นอกจากนี้ยังมีความเป็นไปได้ในการจัดการกับสถานการณ์เมื่อจับล็อคได้แล้ว
ReentrantLockเป็นหนึ่งในการใช้งานเท อร์เฟ ซ Lock ซึ่ง เป็นคลาส ReentrantLock อนุญาตให้เธรดเดียวกันเรียกใช้เมธอดการล็อก แม้ว่าจะมีการเรียกก่อนหน้านี้ โดยไม่คลายการล็อก
คลาสReentrantLockนอกจากเมธอดของ อินเทอร์ เฟซล็อคแล้ว ยังมีเมธอดโรงงานnewCondition() เมธอดนี้ส่งคืนวัตถุเงื่อนไขซึ่งอนุญาตให้คุณเพิ่มเธรดปัจจุบันไปยังชุดการรอของวัตถุที่กำหนดเงื่อนไข.
private final Lock R_LOCK = ReentrantLock();
R_LOCK.lock();
try {
//some action happens here
} finally {
R_LOCK.unlock();
}
ReadWriteLockเป็นอินเทอร์เฟซสำหรับสร้างล็อคการอ่าน/เขียน การล็อกมีประโยชน์อย่างยิ่งเมื่อระบบมีการอ่านจำนวนมากและเขียนน้อย
ReentrantReadWriteLock - ใช้ในบริการและแคชแบบมัลติเธรด มีการเพิ่มประสิทธิภาพที่ดีเมื่อเทียบกับบล็อกที่ซิงโครไนซ์ ในความเป็นจริงคลาสทำงานใน 2 โหมดพิเศษร่วมกัน: ผู้อ่านหลายคนอ่านข้อมูลแบบขนานและเมื่อผู้เขียนเพียง 1 คนเขียนข้อมูล
ReentrantReadWriteLock.ReadLock - ล็อกการอ่านสำหรับผู้อ่าน ซึ่งได้รับผ่าน readWriteLock.readLock()
ReentrantReadWriteLock.WriteLock - ล็อคการเขียนสำหรับผู้เขียน ได้รับผ่าน readWriteLock.writeLock()
ซิงโครไนเซอร์
![](https://cdn.codegym.cc/images/article/cb9ae844-7dce-459b-b8af-55a1830c5fb1/512.jpeg)
AbstractOwnableSynchronizerเป็นคลาสพื้นฐานที่รับผิดชอบในการสร้างกลไกการซิงโครไนซ์ ประกอบด้วย getter/setter เพื่อจดจำและอ่านสตรีมพิเศษที่สามารถทำงานกับข้อมูลของคุณได้
AbstractQueuedSynchronizerเป็นคลาสพื้นฐานสำหรับกลไกการซิงโครไนซ์ใน FutureTask, CountDownLatch, Semaphore, ReentrantLock, ReentrantReadWriteLock นอกจากนี้ยังใช้เมื่อสร้างกลไกการซิงโครไนซ์ใหม่ที่ใช้ค่าเดียวและค่า atomic int
AbstractQueuedLongSynchronizerเป็นตัวแปรของ AbstractQueuedSynchronizerที่รองรับค่า Atomic Long