`
scjp
  • 浏览: 3345 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
最近访客 更多访客>>
社区版块
存档分类
最新评论

生产者与消费者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();
	}
}
0
0
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics