生产者与消费者Java实现_JAVA_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > JAVA > 生产者与消费者Java实现

生产者与消费者Java实现

 2011/10/21 8:18:32  scjp  http://scjp.iteye.com  我要评论(0)
  • 摘要:Container类packagemultithread.producerandconsumer;publicclassContainer{staticintsize=5;intindex=0;String[]container=newString[size];synchronizedpublicvoidadd(Stringproduction){if(index>=size){try{wait();}catch(InterruptedExceptione){e
  • 标签:实现 Java 消费者
Container类
package multithread.producerandconsumer;

public class Container {
	static int size=5;
	int index=0;
	String [] container=new String[size];
	
	
	synchronized public void add(String production){
		if(index>=size){
			try {
				wait();
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
			
		}
		container[index]=production;
		System.out.println("P-"+Thread.currentThread().getName()+" produce "+container[index]+" production");
		index++;
		notify();
	}
	
	synchronized public void remove(){
		if(index==0){
			try {
				wait();
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
		}
		index--;
		System.out.println("C-"+Thread.currentThread().getName()+" consume "+container[index]+" production");
		container[index]=null;
		notify();
		
	}
}

Producer类
package multithread.producerandconsumer;

public class Producer implements Runnable {
	Container container=null;
	Producer(Container container){
		this.container=container;
	}
	@Override
	public void run() {
		long proId=0;
		while(true){
			
			proId++;
			container.add(proId+"NO.");
			if(proId==10)
				break;
		}
	}
}

Consumer类
package multithread.producerandconsumer;

public class Consumer implements Runnable {
	Container container=null;
	Consumer(Container container){
		this.container=container;
	}
	@Override
	public void run() {
		for(int i=0;i<10;i++){
			try {
				Thread.sleep(1000);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
			container.remove();
		}
	}

}

测试类
package multithread.producerandconsumer;

public class TestProduceAndConsume {

	public static void main(String[] args) {
		Container container=new Container();
		Producer prod=new Producer(container);
		Consumer consumer=new Consumer(container);
		new Thread(prod).start();
		new Thread(consumer).start();
//		new Thread(consumer).start();
//		new Thread(consumer).start();
	}
}
发表评论
用户名: 匿名