复习过程中 发现出了不少问题啊
温故而知新 可以为师矣 这句话说得太对了
我就说正题
我现在写了一个经典的消费 生成模式
我还是采用的for循环 因为while循环这个玩不好 机子就死掉 伤不起
public class CommodityDemo {
/**
* @param args
*/
public static void main(String[] args) {
Commodity c = new Commodity();
new Thread(new Produce(c)).start();
new Thread(new Consumer(c)).start();
}
}
class Commodity{
private String name;
private int count=1;
private boolean flag=false;
public synchronized void set(String name){
this.name = name+"----"+count++;
if(flag){
try {
this.wait();
} catch (InterruptedException e) {
}
System.out.println(Thread.currentThread().getName()+"生产者"+this.name);
}
else{
this.notify();
flag =true;
}
}
public synchronized void out(){
if(!flag){
try {
this.wait();
} catch (InterruptedException e) {
}
System.out.println(Thread.currentThread().getName()+"消费者"+this.name);
}
else{
this.notify();
flag = false;
}
}
}
class Produce implements Runnable{
private Commodity com;
Produce(Commodity com){
this.com =com;
}
@Override
public void run() {
for(int x =0;x<20;x++){
com.set("商品");
}
}
}
class Consumer implements Runnable{
private Commodity com;
Consumer(Commodity com){
this.com =com;
}
@Override
public void run() {
for(int y=0;y<20;y++){
com.out();
}
}
}
这里同步都加好了 是消费一个生产一个的 结果 发现
出现
Thread-0生产者商品----2
Thread-0生产者商品----4
Thread-1消费者商品----6
Thread-0生产者商品----6
Thread-1消费者商品----8
这样的情况 请问大神 这是什么原因 怎样修改{:soso_e136:}
|