chocolateapple001 2017-07-05 02:27 采纳率: 0%
浏览 1107
已结题

关于Condition与线程绑定的问题

正在自学java,在多线程部分看到Lock与Condition部分的内容,有点不明白。

    Condition producer_con = lock.newCondition();
    Condition consumer_con = lock.newCondition();
    public void set(String name)
    {
        lock.lock();
        try
        {
            while(flag)  //若有烤鸭,就不生产
            try{producer_con.await();}catch(InterruptedException e){}
            this.name = name + count;
            count++;
            System.out.println(Thread.currentThread().getName()+"...生产者..."+this.name);
            flag = true;
            consumer_con.signal();
        }
        finally
        {lock.unlock();}
    }


我不明白,Condition对象与线程是怎么绑定的?难道是,某个线程是由哪个Condition对象调用await()阻塞的,就由哪个Condition对象唤醒?那么因为没有获取锁而自动阻塞的线程又怎么解释?

  • 写回答

4条回答 默认 最新

  • oyljerry 2017-07-05 06:00
    关注

    多个生产者线程都会使用同一个producer_con ,多个消费者线程都使用同一个consumer_con

    这样线程内部,就会根据await和signal来在线程之间同步

    评论

报告相同问题?

悬赏问题

  • ¥15 HFSS 中的 H 场图与 MATLAB 中绘制的 B1 场 部分对应不上
  • ¥15 如何在scanpy上做差异基因和通路富集?
  • ¥20 关于#硬件工程#的问题,请各位专家解答!
  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 報錯:Person is not mapped,如何解決?