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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

1. wait() notify()  notifyAll()  为什么要通过所对象来调用?
2.
  1. class Resource   
  2. {     
  3.     private String name;  
  4.     private int count=1;  
  5.     private boolean flag = false;  
  6.       
  7.     //多态  
  8.     private Lock lock=new ReentrantLock();  
  9.   
  10.     //创建两Condition对象,分别来控制等待或唤醒本方和对方线程  
  11.     Condition condition_pro=lock.newCondition();  
  12.     Condition condition_con=lock.newCondition();  
  13.   
  14.     //p1、p2共享此方法  
  15.     public void setProducer(String name)throws InterruptedException  
  16.     {  
  17.         lock.lock();//锁  
  18.         try  
  19.         {  
  20.             while(flag)//重复判断标识,确认是否生产  
  21.                 condition_pro.await();//本方等待  
  22.   
  23.             this.name=name+"......"+count++;//生产  
  24.             System.out.println(Thread.currentThread().getName()+"...生产..."+this.name);//打印生产  
  25.             flag=true;//控制生产\消费标识  
  26.             condition_con.signal();//唤醒对方  
  27.         }  
  28.         finally  
  29.         {  
  30.             lock.unlock();//解锁,这个动作一定执行  
  31.         }  
  32.          
  33.     }  
  34.   
  35.     //c1、c2共享此方法  
  36.     public void getConsumer()throws InterruptedException  
  37.     {  
  38.         lock.lock();  
  39.         try  
  40.         {  
  41.             while(!flag)//重复判断标识,确认是否可以消费  
  42.                 condition_con.await();  
  43.   
  44.             System.out.println(Thread.currentThread().getName()+".消费."+this.name);//打印消费  
  45.             flag=false;//控制生产\消费标识  
  46.             condition_pro.signal();  
  47.         }  
  48.         finally  
  49.         {  
  50.             lock.unlock();  
  51.         }  
  52.   
  53.     }  
  54. }  
复制代码


上述代码中,为什么 condition_pro 和conditon_con 只是两个变量名字而已,为什么condition_pro.await()就表示了本方等待?condition_pro是怎么指向本方线程的?不可能是因为变量名是pro就指向生产线程吧?

1 个回复

倒序浏览
1.为什么要通过锁对象调用?字写错啦
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马