- package cn.itcast.gz;
- import java.util.Random;
- import java.util.concurrent.ArrayBlockingQueue;
- import java.util.concurrent.BlockingQueue;
- public class ProducerConsumerTest {
- private final static BlockingQueue<Integer> blockingQueue = new ArrayBlockingQueue<Integer>(3);
- public static void main(String[] args) {
- Producer5 producer = new Producer5(blockingQueue);
- Consumer5 consumer = new Consumer5(blockingQueue);
- Thread t1 = new Thread(producer);
- Thread t2 = new Thread(producer);
- Thread t3 = new Thread(consumer);
- Thread t4 = new Thread(consumer);
- t1.start();
- t2.start();
- t3.start();
- t4.start();
- }
- }
- class Producer5 implements Runnable
- {
- private BlockingQueue<Integer> blockingQueue;
- public Producer5(BlockingQueue<Integer> blockingQueue)
- {
- this.blockingQueue = blockingQueue;
- }
- @Override
- public void run() {
- while(true)
- {
- try {
- int value = new Random().nextInt(10);
- System.out.println("正在准备放数据 "+value);
- Thread.sleep(new Random().nextInt(10)*100);
- blockingQueue.put(value);
- } catch (InterruptedException e) {
- e.printStackTrace();
- }
- }
- }
- }
- class Consumer5 implements Runnable{
- private BlockingQueue<Integer> blockingQueue;
- public Consumer5(BlockingQueue<Integer> blockingQueue)
- {
- this.blockingQueue = blockingQueue;
- }
- @Override
- public void run() {
- while(true)
- {
- try {
- System.out.println("正在准备取数据 ");
- Thread.sleep(new Random().nextInt(10)*1000);
- System.out.println("取到的数据 " +blockingQueue.take());
- } catch (InterruptedException e) {
- e.printStackTrace();
- }
- }
- }
- }
- //该片段来自于http://www.codesnippet.cn/detail/030120148376.html
来源: http://www.codesnippet.cn/detail/030120148376.html