求助:java生产者消费者问题
package JavaTest;
import java.io.*;
public class JavaTest{
public static void main(String[] args){
Kuang k=new Kuang();
Producer p=new Producer(k);
Consumer c=new Consumer(k);
Thread t1=new Thread(p);
Thread t2=new Thread(c);
t1.start();
t2.start();
}
}
class ManTou{
int id;
public ManTou(int id){
this.id=id;
}
public String toString(){
return "MT"+id;
}
}
class Kuang{
int index=0;
ManTou[] Mts=new ManTou[6];
public synchronized void in(ManTou mt) throws InterruptedException{
//System.out.println(Mts.length);
while(index==Mts.length){
this.wait();
}
this.notify();
Mts[index]=mt;
index++;
System.out.println("生产者---------------"+index);
}
public synchronized ManTou out() throws InterruptedException{
while(index==0){
this.wait();
}
this.notify();
index--;
//System.out.println("消费者---------------"+index);
return Mts[index];
}
}
class Producer implements Runnable{
Kuang k=null;
Producer(Kuang k){
this.k=k;
}
public void run(){
for(int j=0;j<10;j++){
ManTou mt=new ManTou(j);
try {
k.in(mt);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("生产了:"+mt);
}
}
}
class Consumer implements Runnable{
Kuang k=null;
Consumer(Kuang k){
this.k=k;
}
public void run(){
for(int i=0;i<10;i++){
ManTou mt=new ManTou(i);
try {
k.out();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("消费了:"+mt);
}
}
//System.out.println(""+k);
}
程序执行后有时候会生产MT0~MT6,这是为什么啊
浙公网安备 33010602011771号