黑马程序员技术交流社区

标题: 关于一个锁里面的多组监视器该怎么理解? [打印本页]

作者: 她只是过客    时间: 2014-9-3 21:51
标题: 关于一个锁里面的多组监视器该怎么理解?
关于一个锁里面的多组监视器该怎么理解?我的理解是哪个线程的run里同步的等待,就是哪个线程的监视器,这么理解对吗
作者: 旭辉lin    时间: 2014-9-6 21:26
监视器作用在同一把锁上,同一个线上有多个监视器,有一个监视器控制等待,另外几个具体控制具体唤醒的线程
作者: 她只是过客    时间: 2014-9-6 21:57
旭辉lin 发表于 2014-9-6 21:26
监视器作用在同一把锁上,同一个线上有多个监视器,有一个监视器控制等待,另外几个具体控制具体唤醒的线程 ...

光看前一句不看后一句吗,再看看后一句,监视器监视哪个线程,该怎么理解,{:2_30:}
作者: 旭辉lin    时间: 2014-9-7 09:31
  1. class Resource {
  2.         private String name;
  3.         private int count = 1;
  4.         private boolean flag = false;
  5.         Lock lock = new ReentrantLock();
  6.         Condition producer_con = lock.newCondition();// eclipse提示出故障,如果先敲Condition
  7.                                                                                                         // producer_con=然后出提示
  8.         Condition consumer_con = lock.newCondition();

  9.         public void setName(String name) {//生产线
  10.                 lock.lock();
  11.                 try {
  12.                         while (flag) {
  13.                                 try {
  14.                                         producer_con.await();//生产等待
  15.                                 } catch (InterruptedException e) {
  16.                                         e.printStackTrace();
  17.                                 }
  18.                         }
  19.                         this.name = name + count;
  20.                         count++;
  21.                         System.out.println(Thread.currentThread().getName() + "生产者"
  22.                                         + this.name);
  23.                         flag = true;
  24.                         consumer_con.signal();//唤醒消费
  25.                 } finally {
  26.                         lock.unlock();
  27.                 }

  28.         }

  29.         public void getName() {//消费线
  30.                 lock.lock();
  31.                 try {
  32.                         while (!flag) {
  33.                                 try {
  34.                                         consumer_con.await();//消费等待
  35.                                 } catch (InterruptedException e) {
  36.                                         e.printStackTrace();
  37.                                 }
  38.                         }
  39.                         System.out.println(Thread.currentThread().getName()
  40.                                         + "消费者------------" + this.name);
  41.                         flag = false;
  42.                         producer_con.signal();//唤醒生产
  43.                 } finally {
  44.                         lock.unlock();
  45.                 }

  46.         }
  47. }
复制代码

作者: 她只是过客    时间: 2014-9-7 18:04
旭辉lin 发表于 2014-9-7 09:31

哪个线程的run里同步的等待,就是哪个线程的监视器,这么理解对不对?
作者: 旭辉lin    时间: 2014-9-7 18:42
嗖都是门...




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