
สภาพแวดล้อมการทำงานของบทช่วยสอนนี้: ระบบ 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 ได้ในขั้นต้น และคุณยังสามารถขยายเนื้อหาที่เกี่ยวข้องของการล็อกการกลับเข้าใหม่หลังเลิกเรียนได้ด้วย