首页 > 编程语言 > 详细

8、JUC--Condition 控制线程通信

时间:2019-05-01 15:25:52      阅读:142      评论:0      收藏:0      [点我收藏+]

Condition

? Condition 接口描述了可能会与锁有关联的条件变量。这些变量在用
  法上与使用 Object.wait 访问的隐式监视器类似,但提供了更强大的
  功能。需要特别指出的是,单个 Lock 可能与多个 Condition 对象关
  联。为了避免兼容性问题,Condition 方法的名称与对应的 Object 版
  本中的不同。
? 在 Condition 对象中,与 wait、notify 和 notifyAll 方法对应的分别是
  await、signal 和 signalAll。
? Condition 实例实质上被绑定到一个锁上。要为特定 Lock 实例获得
  Condition 实例,请使用其 newCondition() 方法

 

 

 

使用Lock锁进行控制线程安全

继上一个工程的项目更改:

class Clerk1{
    private int product =0;
    
    //Lock锁
    private Lock lock = new ReentrantLock();
    //获取Condition对象
    private Condition condition = lock.newCondition();
    //进货
    public  void get(){
        //上锁
        lock.lock();
        try {
            while(product >=1){
                System.out.println("产品已满!");
                try {
                    //this.wait();
                    condition.await();
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
                System.out.println(Thread.currentThread().getName()+":"+ ++product);
                //this.notifyAll();
                condition.signalAll();
        } finally {
            //解锁
            lock.unlock();
        }
    }
    
    //卖货
    public  void sale(){
        //上锁
        lock.lock();
        try {
            while(product <=0){
                System.out.println("产品卖完");
                try {
                    //this.wait();
                    condition.await();
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
                System.out.println(Thread.currentThread().getName()+":"+ --product);
                //this.notifyAll();
                condition.signalAll();
        } finally {
            lock.unlock();
        }
    }
}

 

此时运行之后的结果:

技术分享图片

 

8、JUC--Condition 控制线程通信

原文:https://www.cnblogs.com/Mrchengs/p/10799854.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!