马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
这种关于生产者和消费者的代码 //生产产品
public synchronized void produceProduct() {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
if(productCount < 20){
productCount++;
System.out.println(Thread.currentThread().getName() + ":开始生产第" + productCount + "个产品");
notify();
}else{
//等待
try {
wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
//消费产品
public synchronized void consumeProduct() {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
if(productCount > 0){
System.out.println(Thread.currentThread().getName() + ":开始消费第" + productCount + "个产品");
productCount--;
notify();
}else{
//等待
try {
wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
消费者和生产者的run()里调用的是这两段代码,我把sleep()放进同步里,执行好几遍,结果都是生产者要生产够20个,消费者才开始消费。但是如果把sleep()放在run()里,那就是有一定的交替。
不太明白,一开始消费者肯定是wait,但生产者生产出一个产品后,就把消费者唤醒了啊,以后按道理消费者是有可能在生产者没wait前,拿到cpu执行权的啊 |