生产者/消费者模型,没有使用线程间通信,导致生产者/消费者不同步。
package chapter10;
//非同步Container,生产者放入内容,消费者取出内容,结果不可预料
class Container1{//内容
private int contents;
private boolean available =false;
public int get(){
available=false;
return contents;
}
public void put(int value){
contents=value;
available=true;
}
}
class Producer1 extends Thread{//生产者
private Container1 container;
private int number;
public Producer1(Container1 c,int number){
container=c;
this.number=number;
}
public void run(){
for(int i=0;i<5;i++){
container.put(i);
System.out.println("生产者#"+this.number+"生产:"+i);
try{
sleep((int)(Math.random()*100));
}catch(InterruptedException e){
}
}
}
}
class Consumer1 extends Thread{//消费者
private Container1 container;
private int number;
public Consumer1(Container1 c,int number){
container=c;
this.number=number;
}
public void run(){
int value=0;
for(int i=0;i<5;i++){
value=container.get();
System.out.println("消费者#"+this.number+"消费:"+value);
}
}
}
public class ProducerConsumerUnsynchronized {
public static void main(String[] args) {
// TODO Auto-generated method stub
Container1 c=new Container1();
Producer1 p1=new Producer1(c, 1);
Consumer1 c1=new Consumer1(c, 1);
p1.start();
c1.start();
}
}
运行结果:
生产者#1生产:0
消费者#1消费:0
消费者#1消费:0
消费者#1消费:0
消费者#1消费:0
消费者#1消费:0
生产者#1生产:1
生产者#1生产:2
生产者#1生产:3
生产者#1生产:4