publicclassTextThread{publicstaticvoidmain(String[]args){Basketbk=newBasket();Producerp=newProducer(bk);Consumerc=newConsumer(bk);newThread(c).start();newThread(p).start(...
public class TextThread{
public static void main(String[] args){
Basket bk=new Basket();
Producer p=new Producer(bk);
Consumer c=new Consumer(bk);
new Thread(c).start();
new Thread(p).start();
}
}
class ManTou{
int id;
ManTou(int id){
this.id=id;
}
public String toString(){
return "ManTou:"+id;
}
}
class Basket{
static int index=0;
ManTou[] mArray=new ManTou[6];
public synchronized void add(ManTou m){
while(index==mArray.length){
try{
this.wait();
}catch(InterruptedException e){
e.printStackTrace();
}
}
this.notify();
mArray[index]=m;
index++;
}
public synchronized ManTou del(){
while(index==0){
try{
this.wait();
}catch(InterruptedException e){
e.printStackTrace();
}
}
this.notify();
index--;
return mArray[index];
}
}
class Producer implements Runnable{
Basket bk=null;
Producer(Basket bk){
this.bk=bk;
}
public void run(){
for(int i=0;i<20;i++){
ManTou mt=new ManTou(i);
bk.add(mt);
System.out.println("生产了"+mt);
try{
Thread.sleep(1000);
}catch(InterruptedException e){
e.printStackTrace();
}
}
}
}
class Consumer implements Runnable{
Basket bk=null;
Consumer(Basket bk){
this.bk=bk;
}
public void run(){
for(int i=0;i<20;i++){
ManTou mt=bk.del();
System.out.println("消费了"+mt);
try{
Thread.sleep(1000);
}catch(InterruptedException e){
e.printStackTrace();
}
}
}
}
这是经典的生产者与消费者问题,我让他生产一个消费一个,可是我运行的时候为什么会出现先消费后生产。比如我先消费了ID号为3的馒头,然后再生产出ID号为3的馒头,这明显是有问题的,可是我已经用WAIT()这个方法了呀~
展开