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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 代文娟 中级黑马   /  2013-11-13 20:55  /  994 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. class Resource
  2. {
  3.         private String name;
  4.         private int count = 1;
  5.         private boolean flag = false;               
  6.         private Lock lock = new ReentrantLock();
  7.         private Condition condition_pro = lock.newCondition();
  8.         private Condition condition_con = lock.newCondition();
  9.         public  void set(String name)throws InterruptedException
  10.         {
  11.                 lock.lock();
  12.                 try
  13.                 {
  14.                         while(flag)
  15.                                 condition_pro.await();//t1,t2
  16.                         this.name = name+"--"+count++;

  17.                         System.out.println(Thread.currentThread().getName()+"...生产者.."+this.name);
  18.                         flag = true;
  19.                         condition_con.signal();
  20.                 }
  21.                 finally
  22.                 {
  23.                         lock.unlock();//释放锁的动作一定要执行。
  24.                 }
  25.         }
  26.         public  void out()throws InterruptedException
  27.         {
  28.                 lock.lock();
  29.                 try
  30.                 {
  31.                         while(!flag)
  32.                                 condition_con.await();
  33.                         System.out.println(Thread.currentThread().getName()+"...消费者........."+this.name);
  34.                         flag = false;
  35.                         condition_pro.signal();
  36.                 }
  37.                 finally
  38.                 {
  39.                         lock.unlock();
  40.                 }
  41.                
  42.         }
  43. }
复制代码
在老师写的代码中这两句话  private Condition condition_pro = lock.newCondition();
                                      private Condition condition_con = lock.newCondition();
怎么能判断condition_pro就是获取的是生产者的锁,condition_con就是获取的是消费者的锁呢?
这块不太明白,请大家帮我解释解释。

评分

参与人数 1技术分 +1 收起 理由
黄炳期 + 1

查看全部评分

2 个回复

倒序浏览
本帖最后由 zuiaichiyu 于 2013-11-13 21:51 编辑

我觉得你是被老师的命名误导了,然其实这两个锁跟是生产者的还是消费者的没有关系,condition_pro 和condition_con 只是通过实现Lock绑定到锁上的两个实例对象,你查下JDK,Lock 替代了 synchronized 方法和语句的使用,Condition 替代了 Object 监视器方法的使用。conditon就是将监视器中的wait notify notifyAll分成了不同的对象,lock.lock()拿到锁后,判断是否可以执行,如果不能,condition调用await()方法,就相当于普通的对象的wait()方法,所以不要想condition是消费者还是生产者的

评分

参与人数 1技术分 +1 收起 理由
FFF + 1 赞一个!

查看全部评分

回复 使用道具 举报
明白了,多谢啦
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马