线程锁ล็อค
ล็อค相当于ซิงโครไนซ์
นำเข้า java.util.concurrent.locks.lock; นำเข้า java.util.concurrent.locks.reentrantlock; / * * ล็อคล็อค = ใหม่ reentrantlock (); * lock.lock (); lock.unlock (); * 类似于ซิงโครไนซ์, 但不能与ซิงโครไนซ์混用 */ คลาสสาธารณะ locktest {โมฆะคงที่สาธารณะหลัก (สตริง [] args) {รอบนอกรอบสุดท้าย = ใหม่ locktest (). ใหม่นอก (); เธรดใหม่ (ใหม่ runnable () {@Override โมฆะสาธารณะ run () {// todo วิธีการที่สร้างอัตโนมัติในขณะที่ (จริง) {outer.out1 ("zhangxiaoxiao"); outer.out2 ("lihuoming");}}}) เธรดใหม่ (ใหม่ runnable () {@Override โมฆะสาธารณะ run () {// todo วิธีการที่สร้างอัตโนมัติในขณะที่ (จริง) {outer.out1 ("zhangxiaoxiao"); outer.out2 ("lihuoming");}}}) } ชั้นนอกคลาส {ล็อคล็อค = ใหม่ reentrantlock (); เป็นโมฆะ out1 (ชื่อสตริง) {lock.lock (); int len = name.length (); สำหรับ (int i = 0; i <len; i ++) {system.out.print (name.charat (i)); } system.out.println (); lock.unlock (); } void out2 (ชื่อสตริง) {lock.lock (); int len = name.length (); สำหรับ (int i = 0; i <len; i ++) {system.out.print (name.charat (i)); } system.out.println (); lock.unlock (); -
读写锁 reentrantreadwriteLock
读写锁: 允许多条线程同时读;不能读中有写;不能写中有读;不能写中有写
นำเข้า java.util.hashmap; นำเข้า java.util.map; นำเข้า java.util.concurrent.locks.readwriteLock; นำเข้า java.util.concurrent.locks.reentrantrantreadwriteLock; / * * 问题问题Private ReadWriteLock Lock = ใหม่ reentRantReadWriteLock (); // 读写锁วัตถุสาธารณะ getInstance1 (คีย์สตริง, object obj) {lock.readlock (). lock (); ค่าวัตถุ = null; ลอง {value = data.get (คีย์); if (value == null) {// 一条线程进入这里, lock.readlock (). ปลดล็อค (); // 读锁解了, 其他线程就可能也到这了 lock.writeLock (). lock (); // 只能有一条线程到这, 写锁开启, 要写入数据了要写入数据了要写入数据了要写入数据了要写入数据了要写入数据了要写入数据了,,,,,,,,,,,, / *先判断数据,, 才写入,, 因为界时当写锁解除后,,,,, 判断到数据存在,, 就跳过了。就不会发生同时写入的情况 */ data.put (คีย์, ค่า); } lock.writeLock (). ปลดล็อค (); // 写完了, 解锁 lock.readlock (). lock (); }} ในที่สุด {lock.readlock (). ปลดล็อค (); } ค่าส่งคืน; -