阻塞队列LinkedBlockQueue
Posted lay2017
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了阻塞队列LinkedBlockQueue相关的知识,希望对你有一定的参考价值。
一、简介
Java提供了FIFO先进先出的阻塞队列实现,这其实是一种生产者消费者理念,可以通过阻塞队列将生产者和消费者进行解耦合。
LinkedBlockQueue是一种无界队列,但事实上它只是队列可容纳的最大值很大。通常,我们为了防止特殊情况,都会给队列设置一个边界。
JDK文档:http://tool.oschina.net/uploads/apidocs/jdk-zh/java/util/concurrent/LinkedBlockingQueue.html
二、示例
以下示例,包括:
1)offer:向队列尾部提交元素。
offer和put很类似,但put会一直阻塞直到可用或者异常
2)poll:获取并移除队列头部元素。
poll和take类似,但take仅支持持续阻塞,poll可以选择超时时间。
import java.util.concurrent.BlockingQueue; import java.util.concurrent.LinkedBlockingQueue; public class BlockQueueDemo { private BlockingQueue<String> userQueue = new LinkedBlockingQueue<>(); private void offer() { // 每1秒钟,offer一条数据 for (int i = 0; i < 10; i++) { int id = i; new Thread(() -> { userQueue.offer("user: ID=" + id); }).start(); System.out.println("offered"); try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } } } private void poll() { // 每1秒钟,poll一条数据 for (int i = 0; i < 10; i++) { int id = i; new Thread(() -> { String user = userQueue.poll(); System.out.println(user); }).start(); try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } } } public static void main(String[] args) { BlockQueueDemo queueDemo = new BlockQueueDemo(); queueDemo.offer(); queueDemo.poll(); } }
以上是关于阻塞队列LinkedBlockQueue的主要内容,如果未能解决你的问题,请参考以下文章