黑马程序员技术交流社区

标题: jdk1.5新特性Lock类 [打印本页]

作者: 周发建    时间: 2016-3-22 09:42
标题: jdk1.5新特性Lock类
(一)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();//释放锁
                }
               
        }
}






欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2