1. wait() notify() notifyAll() 为什么要通过所对象来调用?
2.
- class Resource
- {
- private String name;
- private int count=1;
- private boolean flag = false;
-
- //多态
- private Lock lock=new ReentrantLock();
-
- //创建两Condition对象,分别来控制等待或唤醒本方和对方线程
- Condition condition_pro=lock.newCondition();
- Condition condition_con=lock.newCondition();
-
- //p1、p2共享此方法
- public void setProducer(String name)throws InterruptedException
- {
- lock.lock();//锁
- try
- {
- while(flag)//重复判断标识,确认是否生产
- condition_pro.await();//本方等待
-
- this.name=name+"......"+count++;//生产
- System.out.println(Thread.currentThread().getName()+"...生产..."+this.name);//打印生产
- flag=true;//控制生产\消费标识
- condition_con.signal();//唤醒对方
- }
- finally
- {
- lock.unlock();//解锁,这个动作一定执行
- }
-
- }
-
- //c1、c2共享此方法
- public void getConsumer()throws InterruptedException
- {
- lock.lock();
- try
- {
- while(!flag)//重复判断标识,确认是否可以消费
- condition_con.await();
-
- System.out.println(Thread.currentThread().getName()+".消费."+this.name);//打印消费
- flag=false;//控制生产\消费标识
- condition_pro.signal();
- }
- finally
- {
- lock.unlock();
- }
-
- }
- }
复制代码
上述代码中,为什么 condition_pro 和conditon_con 只是两个变量名字而已,为什么condition_pro.await()就表示了本方等待?condition_pro是怎么指向本方线程的?不可能是因为变量名是pro就指向生产线程吧? |
|