การวิจัยหลักเกี่ยวกับคุณสมบัติ ReadWriteLock ในบทความนี้ดังนี้
Readlock และ Readlock ไม่ได้เกิดร่วมกัน
Readlock และ Writelock เป็นเอกสิทธิ์เฉพาะบุคคล
WriteLock และ Readlock เป็นเอกสิทธิ์เฉพาะบุคคล
WriteLock และ Writelock เป็นพิเศษร่วมกัน
เธรด 1 รับ readlock ก่อนเธรด 2 พยายามที่จะรับ readlock คุณสามารถรับเธรด 1 รับ readlock ก่อนด้าย 2 พยายามที่จะได้รับ writelock การบล็อกและรอและคุณสามารถรับด้าย 1 จนกว่าเธรด 1 จะปล่อยล็อคและคุณจะได้รับด้าย 1
แพ็คเกจ com.alio.lock; นำเข้า java.text.simpledateFormat; นำเข้า java.util.date; นำเข้า java.util.concurrent.locks.lock; นำเข้า java.util.concurrent.locks.locksedwriteLock; {Static SimpleDateFormat SDF = ใหม่ SimpledateFormat ("yyyy-mm-dd hh: mm: ss.sss"); โมฆะคงที่สาธารณะหลัก (สตริง [] args) {data data = data ใหม่ (); คนงาน t1 = คนงานใหม่ t1.start (); t2.start (); t3.start ();} ผู้ทำงานในชั้นเรียนคงที่ขยายเธรด {ข้อมูลข้อมูล; บูลีนอ่าน; คนงานสาธารณะ (ข้อมูลข้อมูล, การอ่านบูลีน) {this.data = data; this.read = อ่าน; data.write ();}} ข้อมูลคลาสคงที่ {readWriteLock lock = ใหม่ reentRantReadWriteLock (); lock read = lock.readlock (); ล็อคเขียน = lock.writeLock (); void สาธารณะเขียน () {ลอง {thread.sleep (2000); //} {} write.lock (); system.out.println (thread.currentthread () + "เขียน: เริ่มต้น" + sdf.format (วันที่ใหม่ ())); ลอง {thread.sleep (5000); //} catch (exception e) {} {system.out.println วันที่ ())); write.unlock ();}} public int read () {read.lock (); system.out.println (thread.currentthread () + "อ่าน: เริ่มต้น" + sdf.format (ใหม่)); ลอง {thread.sleep (5000); + "อ่าน: สิ้นสุด" + sdf.format (วันที่ใหม่ ())); read.unlock ();} return 1;}}}Thread [Thread-2,5, Main] อ่าน: เริ่มต้น 2018-01-22 13: 54: 16.794
Thread [Thread-1,5, Main] อ่าน: เริ่มต้น 2018-01-22 13: 54: 16.794
Thread [Thread-2,5, Main] อ่าน: End 2018-01-22 13: 54: 21.795
Thread [Thread-1,5, Main] อ่าน: End 2018-01-22 13: 54: 21.795
เธรด [เธรด -0,5, หลัก] เขียน: เริ่มต้น 2018-01-22 13: 54: 21.795
Thread [Thread-0,5, Main] Write: End 2018-01-22 13: 54: 26.795
สามเธรดเริ่มต้นขึ้นในเวลาเดียวกันซึ่งเธรดหมายเลข 1 เธรด Thread[Thread-0,5,main], และมันจะนอนเป็นเวลา 2 วินาทีเมื่อดำเนินการเขียน จากนั้นเธรดหมายเลข 2, เธรดหมายเลข 3 Thread[Thread-1,5,main],Thread[Thread-2,5,main] จะจัดลำดับความสำคัญของการดำเนินการของรหัส
read.lock ();
ตั้งแต่ read.lock(); ไม่ได้เกิดร่วมกัน (สามารถกลับเข้ามาใหม่ได้) พวกเขาได้รับการล็อคในเวลาเดียวกันซึ่งสามารถมองเห็นได้ผ่านบันทึก
Thread [Thread-2,5, Main] อ่าน: เริ่มต้น 2018-01-22 13: 54: 16.794Thread [Thread-1,5, Main] อ่าน: เริ่มต้น 2018-01-22 13: 54: 16.794
และค่าใช้จ่ายในการดำเนินการของพวกเขานั้นเหมือนกัน (รหัสทดสอบนอนหลับเป็นเวลา 5 วินาที) ดังนั้นการดำเนินการจะสิ้นสุดในเวลาเดียวกัน
Thread [Thread-2,5, Main] อ่าน: End 2018-01-22 13: 54: 21.795Thread [Thread-1,5, Main] อ่าน: End 2018-01-22 13: 54: 21.795
เฉพาะเมื่อ readlocks ทั้งหมดถูกปล่อยออกมาเท่านั้นที่สามารถเขียนล็อคได้ ในเวลานี้ล็อคจะถูกปล่อยออกมาหลังจากการดำเนินการของเธรด [Thread-1,5, Main] และ Thread [Thread-2,5, Main] จะถูกปล่อยออกมา
ดังนั้น Thread[Thread-0,5,main] ได้ Writelock และดำเนินการรหัสธุรกิจของตัวเองในเวลานี้
Thread [Thread-0,5, Main] เขียน: เริ่มต้น 2018-01-22 13: 54: 21.795 ท ธ อ่าน [เธรด -0,5, หลัก] เขียน: สิ้นสุด 2018-01-22 13: 54: 26.795
ข้างต้นคือทั้งหมดที่เกี่ยวกับการทดสอบตัวอย่างของคุณสมบัติ readwriteLock ภาษา Java ฉันหวังว่ามันจะเป็นประโยชน์กับทุกคน เพื่อนที่สนใจสามารถอ้างถึงหัวข้ออื่น ๆ ที่เกี่ยวข้องในเว็บไซต์นี้ต่อไป หากมีข้อบกพร่องใด ๆ โปรดฝากข้อความไว้เพื่อชี้ให้เห็น ขอบคุณเพื่อนที่ให้การสนับสนุนเว็บไซต์นี้!