ฉันต้องการเพิ่มบางสิ่งเพิ่มเติมบนคำตอบของ Bert F
Locks
รองรับวิธีการต่าง ๆ สำหรับการควบคุมการล็อกที่ละเอียดยิ่งขึ้นซึ่งมีความหมายมากกว่าจอภาพโดยปริยาย ( synchronized
ล็อค)
ล็อคให้การเข้าถึงแบบเอกสิทธิ์เฉพาะบุคคลไปยังทรัพยากรที่ใช้ร่วมกัน: เพียงหนึ่งเธรดในแต่ละครั้งสามารถรับการล็อคและการเข้าถึงทรัพยากรที่ใช้ร่วมกันทั้งหมดต้องให้ล็อคที่จะได้รับก่อน อย่างไรก็ตามการล็อกบางอย่างอาจอนุญาตให้เข้าถึงทรัพยากรที่ใช้ร่วมกันพร้อมกันเช่นการล็อกการอ่านของ ReadWriteLock
ข้อดีของการล็อคการประสานข้อมูลจากหน้าเอกสาร
การใช้วิธีการหรือข้อความสั่งแบบซิงโครไนซ์ให้การเข้าถึงการล็อกการมอนิเตอร์โดยนัยที่เกี่ยวข้องกับทุกวัตถุ แต่บังคับให้การล็อกและการปล่อยล็อกทั้งหมดเกิดขึ้นในลักษณะที่มีโครงสร้างแบบบล็อก
การใช้งานล็อคให้การทำงานเพิ่มเติมมากกว่าการใช้วิธีการทำข้อมูลให้ตรงกันและงบโดยการให้ความพยายามที่ไม่ปิดกั้นที่จะได้รับlock (tryLock())
เป็นความพยายามที่จะได้รับล็อคที่สามารถขัดจังหวะ ( และความพยายามที่จะได้รับล็อคที่กระป๋องlockInterruptibly()
timeout (tryLock(long, TimeUnit))
คลาสล็อคยังสามารถให้ลักษณะการทำงานและความหมายที่ค่อนข้างแตกต่างจากที่ล็อคหน้าจอโดยปริยายเช่นการสั่งซื้อรับประกันการใช้งานที่ไม่ใช่ reentrant หรือการตรวจสอบการหยุดชะงัก
ReentrantLock : ในแง่ง่ายตามความเข้าใจของฉันReentrantLock
อนุญาตให้วัตถุกลับเข้ามาอีกครั้งจากส่วนวิกฤติหนึ่งไปยังอีกส่วนที่สำคัญ เนื่องจากคุณมีการล็อคเพื่อเข้าสู่ส่วนวิกฤติหนึ่งส่วนคุณสามารถส่วนสำคัญอื่น ๆ บนวัตถุเดียวกันได้โดยใช้การล็อกปัจจุบัน
ReentrantLock
คุณสมบัติที่สำคัญตามบทความนี้
- ความสามารถในการล็อคอินเตอร์รัปต์
- ความสามารถในการหมดเวลาในขณะที่รอการล็อค
- พลังในการสร้างการล็อคที่ยุติธรรม
- API เพื่อรับรายการเธรดที่รอการล็อก
- ความยืดหยุ่นในการลองล็อคโดยไม่ปิดกั้น
คุณสามารถใช้ ReentrantReadWriteLock.ReadLock, ReentrantReadWriteLock.WriteLock
เพื่อรับการควบคุมเพิ่มเติมเกี่ยวกับการล็อคแบบละเอียดในการอ่านและเขียน
นอกจาก ReentrantLocks ทั้งสามนี้แล้ว Java 8 ยังมี Lock อีกหนึ่งตัว
StampedLock:
Java 8 มาพร้อมกับล็อคแบบใหม่ที่เรียกว่า StampedLock ซึ่งรองรับการล็อกการอ่านและการเขียนเช่นเดียวกับในตัวอย่างด้านบน ตรงกันข้ามกับ ReadWriteLock วิธีการล็อคของ StampedLock ส่งคืนตราประทับที่แสดงด้วยค่ายาว
คุณสามารถใช้ตราประทับเหล่านี้เพื่อปลดล็อคหรือตรวจสอบว่าล็อคยังใช้งานได้อยู่หรือไม่ นอกจากนี้ล็อคที่ประทับตรายังรองรับโหมดล็อคอื่นที่เรียกว่าการล็อคในแง่ดี
ดูที่บทความนี้เกี่ยวกับการใช้งานประเภทReentrantLock
และStampedLock
ล็อคที่แตกต่างกัน