|
(一)DK1.5 新特性 Lock类 将锁和监视器单独描述,封装成对象 同步代码块对锁的操作是隐式的,后期把锁封装成了对象,把隐式变成了显示动作;并且可以获取多组监视器 java.util.concurrent.locks Condition:封装监视器的类 Lock:封装锁的类 Lock lock = new ReentrantLock(); //创建锁 final Conditon full = lock.newCondition(); //从锁上获取监视器 final Conditon empty = lock.newCondition(); lock.lock();//获取锁 try{ //需要同步的代码 }finally{ lock.unlock();//释放锁 } //烤鸭,使用JDK1.5新特性的Lock class RoastedDuckLock{ private boolean flag = false; private String name; private int num; Lock lock = new ReentrantLock(); //创建锁 final Condition full = lock.newCondition(); //从锁上获取监视器 final Condition empty = lock.newCondition(); public void set(String name){ lock.lock(); //获取锁 try { while(flag) try{full.await();}catch(InterruptedException e){} this.name = name; num++; System.out.println("生产者生产了第"+num+"只"+name); flag = true; empty.signal(); } finally { lock.unlock();//释放锁 } } public void get(){ lock.lock();//获取锁 try { while(!flag) try{empty.await();}catch(InterruptedException e){} System.out.println("消费者消费了第"+num+"只"+name); flag = false; full.signal(); } finally{ lock.unlock();//释放锁 } } }
|