生产消费者模式--BolockingQueue实现

 BolockingQueue实现

import java.util.Random;
import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.BlockingQueue;

public class Producer implements Runnable{ 
	private final BlockingQueue<Integer> queue; 
	@SuppressWarnings({ "rawtypes", "unchecked" })
	public Producer(BlockingQueue q){ 
		this.queue = q;
	} 

	@Override public void run() { 
		try { 
			while (true){ 
				Thread.sleep(1000);
				//模拟耗时 
				queue.put(produce());
			} 

		}catch (InterruptedException e){

		} 
	} 

	private int produce() {
		int n = new Random().nextInt(10000); 
		System.out.println("Thread:" + Thread.currentThread().getId() + " produce:" + n); 
		return n; 
	} 
} 

//消费者 
class Consumer implements Runnable { 
	private final BlockingQueue<Integer> queue; 
	@SuppressWarnings({ "rawtypes", "unchecked" })
	public Consumer(BlockingQueue q){
		this.queue = q; 
	} 

	@Override 
	public void run() { 
		while (true){ 
			try { 
				Thread.sleep(2000);
				//模拟耗时 
				consume(queue.take()); 

			}catch (InterruptedException e){

			} 
		} 
	} 

	private void consume(Integer n) { 
		System.out.println("Thread:" + Thread.currentThread().getId() + " consume:" + n);

	} 
} 

//测试 
public class Test { 
	public static void main(String[] args) { 
		BlockingQueue<Integer> queue=new ArrayBlockingQueue<Integer>(2);
		Producer p=new Producer(queue); 
		Consumer c1=new Consumer(queue); 
		Consumer c2=new Consumer(queue); 
		new Thread(p).start(); 
		new Thread(c1).start(); 
		new Thread(c2).start(); 
	}
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值