BlockingQueue<E>接口定义了包括两个附加功能的队列。这两个功能是:如果从空队列中取元素或者向满队列中增加元素,则进入等待状态。BlockinQueue接口中的方法pu(e)t和take()可以使其进入无限阻塞状态,可以用这两个方法实现生产者和消费者问题,比较简单。
代码如下:
package com.lk.B; import java.util.Random; import java.util.concurrent.BlockingQueue; import java.util.concurrent.LinkedBlockingQueue; public class Test5 { private BlockingQueue<Integer> queue = new LinkedBlockingQueue<>(2); private class Producer implements Runnable{ @Override public void run() { // TODO Auto-generated method stub for(int i=0;i<5;i++){ int b = new Random().nextInt(255); try { queue.put(b); System.out.println("向队列中加入"+b+"\t队列中有"+queue.size()+"个元素"); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } } private class Consumer implements Runnable{ @Override public void run() { try { Thread.sleep(100); } catch (InterruptedException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } // TODO Auto-generated method stub for(int i=0;i<5;i++){ int b = 0; try { b=queue.take(); System.out.println("从队列中取出"+b+"\t队列中有"+queue.size()+"个元素"); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } } public static void main(String[] args) { Test5 test5 = new Test5(); Producer producer = test5.new Producer(); Consumer consumer = test5.new Consumer(); new Thread(producer).start(); new Thread(consumer).start(); } }
运行结果:
/* 向队列中加入127 队列中有1个元素 向队列中加入113 队列中有2个元素 从队列中取出127 队列中有1个元素 向队列中加入88 队列中有2个元素 从队列中取出113 队列中有1个元素 从队列中取出88 队列中有0个元素 向队列中加入212 队列中有1个元素 从队列中取出212 队列中有0个元素 向队列中加入243 队列中有1个元素 从队列中取出243 队列中有0个元素 */