//定义产品类
class Goods{
private String name;
boolean flag=false;//flag用于判断产品是否还有。
int count= 0;
//定义函数,提供创建产品信息,包括产品名称和序号。序号是自动增加的。
public void setGoods(String name){
this.name=name;
++count;
}
//定义函数生产产品
public synchronized void inputGoods(){
while(flag){
try{this.wait();}catch(Exception e){}//若有产品,就让当前线程等待。
}
setGoods("王哈哈");
System.out.println(Thread.currentThread().getName()+"生产了............."+this.name+this.count+"产品");
flag=true;//将产品状态修改为有产品。
this.notifyAll();//唤醒其他线程
}
//定义函数消费产品
public synchronized void OutputGoods(){
while(!flag){
try{this.wait();}catch(Exception e){}//若无产品,就让当前线程等待。
}
System.out.println(Thread.currentThread().getName()+"消费了"+this.name+this.count);
flag=false;//将产品状态修改为无产品。
this.notifyAll();//唤醒其他线程
}
}
//定义生产者线程
class Producter implements Runnable{
private Goods goods;
public Producter(Goods goods){
this.goods=goods;
}
public void run(){
while(true){
goods.inputGoods();
}
}
}
//定义消费者线程
class Consumer implements Runnable{
private Goods goods;
public Consumer(Goods goods){
this.goods=goods;
}
public void run(){
while(true){
goods.OutputGoods();
}
}
}
public class Shishi {
public static void main(String[] args) {
Goods goods=new Goods();
//启动两个生产线程
new Thread(new Producter(goods)).start();
new Thread(new Producter(goods)).start();
//启动两个消费线程。
new Thread(new Consumer(goods)).start();
new Thread(new Consumer(goods)).start();
}
}
打印输出结果为:
Thread-1生产了.............王哈哈52821产品
Thread-2消费了王哈哈52821
Thread-0生产了.............王哈哈52822产品
Thread-3消费了王哈哈52822
Thread-1生产了.............王哈哈52823产品
Thread-2消费了王哈哈52823
等等等
我定义的产品序号count是从0开始的,为什么不从0开始打印,而直接越到了52821,求大神解决!
|
|