首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > Web前端 >

生产者和消费者有关问题

2012-09-09 
生产者和消费者问题感觉还有点小问题 , 大家帮忙看看import java.util.ArrayListpublic class Generant_C

生产者和消费者问题
感觉还有点小问题 , 大家帮忙看看

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;}}}}

热点排行