การอ่านและการเขียนล็อค: แบ่งออกเป็นล็อคการอ่านและการเขียนล็อคการอ่านหลายครั้งไม่ได้ตำหนิอ่านล็อคและเขียนล็อคร่วมกันซึ่งควบคุมโดย JVM เองเท่านั้น หากรหัสของคุณอ่านเฉพาะข้อมูลหลายคนสามารถอ่านได้ในเวลาเดียวกัน แต่ไม่สามารถเขียนได้ในเวลาเดียวกันอ่านล็อค จากนั้นเขียนสาระสำคัญล็อค ในระยะสั้นอ่านล็อคเมื่ออ่านและเขียนล็อคเมื่อเขียน!
สามเธรดอ่านข้อมูลสามเธรดเขียนข้อมูลตัวอย่าง:
คุณสามารถอ่านได้ในเวลาเดียวกันคุณไม่สามารถเขียนได้ในเวลาเดียวกันคุณไม่สามารถเขียนได้ในเวลาเดียวกันและคุณไม่สามารถอ่านได้เมื่อเขียน
อ่านล็อคเมื่อคุณอ่านอ่านปลดล็อค
ให้ความสนใจกับการปลดล็อคในที่สุด
com.ljq.test.thread; นำเข้า java.util.random; โมฆะสาธารณะคงที่หลัก (สตริง [] args) {สุดท้าย readwrite rw = ใหม่ readwrite (); {rw.read ();}} .start (); ();}}} /** * อ่านและเขียนพิเศษร่วมกันดังนั้นใส่ไว้ในคลาสเดียวกัน * * @Authouse Administrator * * /คลาส ReadWrite {ข้อมูลวัตถุส่วนตัว = null; ข้อมูล แต่มีหลายเธรดที่จะอ่านข้อมูลในเวลาเดียวกัน ReadWriteLock RWL = ใหม่ ReentRAntReadWriteLock (); .sleep ((ยาว) (Math.random () * 1000)); {E.PrintStackTrace ();} ในที่สุด {rwl.readlock () (); ลอง {system.out.println (thread.currentthread (). getName () + "พร้อมที่จะเขียนข้อมูล!" .println (thread.currentthread (). getName () + "มีข้อมูลการเขียน:" + ข้อมูล);
ออกแบบระบบแคชระบบแคช: หากคุณต้องการใช้ข้อมูลคุณต้องโทรหาวิธี GetData (คีย์สตริง) ของวัตถุสาธารณะของฉัน ใครบางคนจะมาที่ข้อมูลนี้ในครั้งต่อไปและฉันจะส่งคืนหมายเลขนี้โดยตรงโดยไม่ต้องค้นหาในฐานข้อมูล ไม่พบฐานข้อมูลสำหรับข้อมูลมาหาฉัน
com.ljq.test.thread; นำเข้า java.util.hashmap; ระบบ * * * @author Administrator * */คลาสสาธารณะ Cachedemo {แผนที่ส่วนตัว <สตริง, วัตถุ> cache = new hashmap <string, object> (); cachedemo cachedemo = new cachedemo (); จากการแคช} readwriteelock ส่วนตัว RWL = ใหม่ reentrantreadwritelock (); / ก่อนตรวจสอบว่ามีค่าในหน่วยความจำภายในถ้า (value == null) {// ถ้าไม่ตรวจสอบในฐานข้อมูลเพื่อไปที่ฐานข้อมูลและบันทึกผลลัพธ์ที่พบในหน่วยความจำภายใน // ปล่อยล็อคอ่าน เขียน RWL.ReadLock () out.println ("อ่านข้อมูลจากฐานข้อมูล"); ค่า = "Zhang San"; ปลดล็อค ();} // rw เพื่อกู้คืนสถานะการอ่านและการเขียน rwl.readlock () ค่า;}}
กลับผลลัพธ์: