生产者消费者,死锁不知该如何修改?多谢!public class producer extends Thread{
private static String[] buffer=new String[8] ;
private static int pi=0;
private static int si=0;public synchronized void produce(){
buffer[pi++%8]="produce";
System.out.println("producer:"+pi);if(pi-si+1>8){
try{
wait();
}catch(Exception e){System.out.println(e);}
}notify();}
public synchronized void consume(){
buffer[si++%8]=null;
System.out.println("consumer:"+si);if(pi-si<0){
try{
wait();
}catch(Exception e){System.out.println(e);}
}
notify();
}public void run(){
try{while(true){produce();
}
}catch(Exception e){}}
}------------------------------------------------------------------------public class consumer extends Thread{
private producer p=null;
public consumer(producer p){this.p=p;
}public void run(){p.consume();
}
}------------------------------------------------------------
public class t9{
public static void main(String[] args){
producer p=new producer();
p.start();
consumer c=new consumer(p);
c.start();}}-------------------------------------------------------------
运行结果:C:\bb>java t9
producer:1
producer:2
producer:3
producer:4
producer:5
producer:6
producer:7
producer:8
consumer:1
producer:9
.....
死锁

解决方案 »

  1.   

    我认为要用这个buffer来作为同步监视器对象!
      

  2.   

    搞错,消费线程少了循环,只消费了一次,所以生产线程总在等待。
    public class consumer extends Thread{
    private producer p=null;
    public consumer(producer p){this.p=p;
    }public void run(){
    while(true){
    p.consume();
    try{sleep(1000);}catch(Exception e){}
    }}
    }