有关生产者和消费者的问题,请高手指点...

来源:百度知道 编辑:UC知道 时间:2024/06/17 07:19:40
自己写了下简单的但是运行后,消费者总是提前消费一个,不知为什么,代码如下:public class Main {

public static void main(String[] args) {
Container con = new Container();

Producer p = new Producer(con);
Consumer c = new Consumer(con);

new Thread(p).start();
new Thread(c).start();
}
}
class Bread {

private int id;

public Bread(int id){
this.id = id;
}

public String toString(){
return "id = " + id;
}
}
class Container {

Bread bread[] = new Bread[10];

int index = 0;

public synchronized void push(Bread b){
if(index == bread.length){
try {
wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
notify();

bread[index] = b;
index++;
}

public synchronized Bread pop(){

if(index == 0){
try {

这是一个同步设计的问题:

public void run() {
for(int i=0;i<20;i++){

Bread b = new Bread(i);
con.push(b);
//当i==4时候,此时b(id == 4)已经被放入到Container里面,但是在System。out。println还没有被调用的时候,consumer::run插入在这里执行,于是出现了所示的结果。
System.out.println("我放进去了 " + b + " breads");
}