線程鎖鎖
鎖相當於當前對象的同步
導入java.util.concurrent.locks.lock;導入java.util.concurrent.locks.reentrantlock; / * *鎖鎖= new Reentrantlock(); * lock.lock(); lock.unlock(); *類似於同步,但不能與同步混用 */ public class lockTest {public static void main(string [] args){final offer ofert oft ofter = new lockTest()。新ofter();新線程(new Runnable(){@Override public void Run(){// todo auto-generated方法存根while(true){outear.out1(“ zhangxiaoxiao”); outear.out2(“ lihuOming”)(“ lihuOming”);}}}}}}}}}})。新線程(new Runnable(){@Override public void Run(){// todo auto-generated方法存根while(true){outear.out1(“ zhangxiaoxiao”); outear.out2(“ lihuOming”)(“ lihuOming”);}}}}}}}}}})。 }類外部{lock lock = new 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(); }}}}
讀寫鎖重新進入wwritelock
讀寫鎖:允許多條線程同時讀;不能讀中有寫;不能寫中有讀;不能寫中有寫
導入java.util.hashmap;導入java.util.map;導入java.util.concurrent.locks.ReadWritelock;導入java.util.concurrent.locks.reentrantreadwritelock; / * *問題:設計一個設計一個的private ReadWritelock lock = new ReentrantreadWritelock(); //讀寫鎖public對象getInstance1(字符串鍵,object obj){lock.readlock()。 lock();對象值= null;嘗試{value = data.get(key); if(value == null){//一條線程進入這裡,lock.readlock()。 unlock(); //讀鎖解了,lock.writelock()。 lock(); // lock(); //只能有一條線程到這,寫鎖開啟,要寫入數據了,if(data.get(key)== null)= = null){value = obj; / *先判斷數據,如果不存在,才寫入,,,因為,其他,再想寫入時} lock.writelock()。 unlock(); //寫完了,lock.readlock()。 lock(); }}最後{lock.readlock()。 unlock(); }返回值; }