A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

© 周发建 中级黑马   /  2016-3-22 09:42  /  506 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

(一)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();//释放锁
                }
               
        }
}

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马