求助: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,这是为什么啊

posted on 2011-01-21 09:45  Yamateh  阅读(417)  评论(1)    收藏  举报

导航