当前位置: 代码迷 >> Java相关 >> 求解下面的代码(标记的部分)在整个代码中的意思解决思路
  详细解决方案

求解下面的代码(标记的部分)在整个代码中的意思解决思路

热度:9346   发布时间:2013-02-25 21:45:38.0
求解下面的代码(标记的部分)在整个代码中的意思
public class ShareData {

private char c;
private boolean isProduced;

public synchronized void putShareChar(char c){

if(isProduced){
System.out.println("消费者还未消费,因此生产者停止生产");
try {
wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
this.c=c; //不懂
isProduced=true;//不懂
notify();
System.out.println("生产了产品"+c);
}

------解决方案--------------------------------------------------------
这个方法会在一个循环里反复调用,this.c = c是将当前生产在产品设置为c,isProduced = true是使得方法在以后的执行中都会执行一次打印和wait(),当消费者完成消费的时候,就会通知生产者进行生产
------解决方案--------------------------------------------------------
探讨

this.c=c; //不懂
这一句是把你传进来的c的值赋给你定义的c。
isProduced=true;//不懂
这一句是对你定义的isProduced初始化。

------解决方案--------------------------------------------------------
LZ的代码应该是生产者和消费者的同步问题。
putShareChar()用来生产字符c.
if(isProduced){   //生产完
System.out.println("消费者还未消费,因此生产者停止生产");
try {
wait();        //等待消费
} catch (InterruptedException e) {
e.printStackTrace();
} //消费结束
}
this.c=c;     //继续生产
isProduced=true;  //标志生产结束。
notify();

另外:wait()有可能被假唤醒,LZ最好用旋锁(spin locks)
参照Practical Java多线程 
  相关解决方案