线程锁 잠금
잠금 ron ch 동기화
java.util.concurrent.locks.lock import; java.util.concurrent.locks.reentrantlock import; / * * 잠금 잠금 = 새로운 재 렌트 런 락 (); * lock.lock (); lock.unlock (); * 동기화, 但不能与 동기화 된 混用 */ public class locktest {public static void main (string [] args) {최종 외부 OUTER = new LockTest (). new OUTER (); 새 스레드 (new Runnable () {@override public void run () {// todo 자동 생성 메소드 스터브 (true) {outer.out1 ( "zhangxiaoxiao"); outer.out2 ( "lihuoming");}}}). 시작 (); 새 스레드 (new Runnable () {@override public void run () {// todo 자동 생성 메소드 스터브 (true) {outer.out1 ( "zhangxiaoxiao"); outer.out2 ( "lihuoming");}}}). 시작 (); } class OUTER {잠금 잠금 = 새로운 reentrantLock (); void out1 (문자열 이름) {lock.lock (); int len = name.length (); for (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 (); for (int i = 0; i <len; i ++) {system.out.print (name.charat (i)); } system.out.println (); lock.unlock (); }}}
读写锁 ReentrantreadWritelock
读写锁 : 允许多条线程同时读;不能读中有写;不能写中有读;不能写中有写
java.util.hashmap import; java.util.map import; java.util.concurrent.locks.readwritelock import; import java.util.concurrent.locks.reentrantreadwritelock; / * * : : 设计一个 缓存机制 缓存机制 的 伪代码 * 从集合中读取数据 从集合中读取数据 从集合中读取数据, 读取不到 读取不到, 就写入, 再考虑多线程并发的情况 */ public class readWritelockTest2 {private map <string, object> data = new Hashmap <String, Object> (); Private ReadWritelock Lock = New ReentrantreadWritelock (); // public Object getInstance1 (문자열 키, 개체 obj) {lock.readlock (). lock (); 객체 값 = null; try {value = data.get (key); if (value == null) {// 一条线程进入这里, lock.readlock (). Unlock (); // 读锁解了 读锁解了, 其他线程就可能也到这了 lock.writelock (). leock (); // 只能有一条线程到这 只能有一条线程到这, 写锁开启, 要写入数据了 if (data.get (key) == null) {value = obj; / *. } lock.writelock (). unlock (); // 写完了, 解锁 lock.readlock (). lock (); }} 마침내 {lock.readlock (). unlock (); } 반환 값; }