สภาพแวดล้อมการทำงานของบทช่วยสอนนี้: ระบบ windows7, เวอร์ชัน java10, คอมพิวเตอร์ DELL G3
1. แนวคิด
ล็อคการอ่าน-เขียนซ้ำ จะรักษา ReadLock และ WriteLock ภายในไว้ เลเยอร์ด้านล่างยังคงเป็น AQS แต่ AQS มีสถานะเดียวเท่านั้น จะควบคุมการอ่านและการเขียนในเวลาเดียวกันได้อย่างไร of state (int) ถูกใช้ที่นี่ บิตแสดงถึงสถานะการอ่าน บิต 16 บิตต่ำแสดงถึงการเขียน บิต 16 บิตสูงแสดงถึงจำนวนเธรดที่ได้รับการล็อคการอ่าน และ 16 บิตต่ำแสดงถึงหมายเลขการกลับเข้าใหม่ของการล็อคการเขียน .
2. หลักการ
ดำเนินการ โดยใช้ คิว CAS+AQS รองรับการล็อคที่ยุติธรรมและการล็อคที่ไม่ยุติธรรม และการดำเนินการทั้งสองก็คล้ายกัน
3. ตัวอย่าง
ReentrantDemo คลาสสาธารณะใช้ Runnable { ล็อค ล็อค = ReentrantLock ใหม่ (); @แทนที่ โมฆะสาธารณะวิ่ง () { ชุด(); - ชุดโมฆะสาธารณะ () { พยายาม { ล็อค.ล็อค(); System.out.println("ตั้งค่าวิธีการ"); รับ(); } จับ (ข้อยกเว้นจ) { e.printStackTrace(); } ในที่สุด { lock.unlock();//จะต้องได้รับการปล่อยตัวในที่สุด } - โมฆะสาธารณะได้รับ () { พยายาม { ล็อค.ล็อค(); System.out.println("รับวิธี"); } จับ (ข้อยกเว้นจ) { e.printStackTrace(); } ในที่สุด { ล็อค.ปลดล็อค(); - - โมฆะคงที่สาธารณะ main (String [] args) { ReentrantDemo reentrantDemo = ReentrantDemo ใหม่(); เธรดใหม่ (reentrantDemo).start(); - -
ข้างต้นคือการทดสอบการกลับเข้าใหม่ของ java ReentrantLock ฉันเชื่อว่าหลังจากอ่านบทความทั้งหมดแล้ว ทุกคนจะสามารถเข้าใจการใช้ ReentrantLock ได้ในขั้นต้น และคุณยังสามารถขยายเนื้อหาที่เกี่ยวข้องของการล็อกการกลับเข้าใหม่หลังเลิกเรียนได้ด้วย