感觉还有点小问题 , 大家帮忙看看
import java.util.ArrayList; public class Generant_Customer { public static void main(String[] args) { Collection c = new Collection(); Generant gen = new Generant(c); Customer cus = new Customer(c); new Thread(gen,"gen01").start(); new Thread(gen,"gen02").start(); new Thread(gen,"gen03").start(); new Thread(cus,"cus01").start(); new Thread(cus,"cus02").start(); } } /** * 资源类 , 消费者和生产者共同操作的资源 */ class Collection { ArrayList<String> collection = new ArrayList<String>(); static final int length = 10; int index = 1 ; int operateCount = 0; /* 生产者生产 */ public synchronized void add(){ if(collection.size()>=length){ try { wait(); } catch (InterruptedException e) { System.out.println("add() has been interrupted !"); System.exit(1); } } notifyAll();//唤醒在此对象监视器上等待的单个线程 collection.add("馒头 编号:"+index); System.out.println("生产者" +Thread.currentThread().getName() + collection.get(index-1)); index ++ ; operateCount++; } /* 消费者消费 */ public synchronized void pop(){ if(collection.size() == 0){ try { wait(); } catch (InterruptedException e) { System.out.println("pop() has been interrupted !"); System.exit(1); } } notifyAll(); //唤醒在此对象监视器上等待的单个线程 System.out.println("--消费者" +Thread.currentThread().getName() + collection.get(collection.size()-1)); collection.remove(collection.size()-1); index -- ; operateCount++; } } class Generant implements Runnable{ Collection coll = null ; public Generant(Collection collection ){ this.coll = collection ; } /* 生产者开始执行 */ public void run() { while(true){ coll.add(); System.out.println(coll.operateCount); try { Thread.sleep(200); } catch (InterruptedException e) { System.out.println("Generant.run() has been interrupted !\\n" + " System continue..."); } } } } class Customer implements Runnable{ Collection coll = null ; /* 线程开关 */ boolean doRun = true ; public Customer(Collection collection ){ this.coll = collection ; } /* 消费者开始执行 */ public void run() { while(doRun){ coll.pop(); System.out.println(coll.operateCount); try { Thread.sleep(150); } catch (InterruptedException e) { System.out.println("Customer.run() has been interrupted !\\n" + " System continue..."); } if(coll.operateCount == 50){ doRun = false; } } } }