线程锁锁
锁相当于当前对象的同步
导入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(); }返回值; }