玖叶教程网

前端编程开发入门

【Concurrent】BlockingQueue阻塞式队列--->你了解有多少?

Concurrent包是jdk5中开始提供的一套并发编程包,其中包含了大量和多线程开发相关的工具类,大大的简化了java的多线程开发,在高并发 分布式场景下应用广泛。本文主要介绍BlockingQueue阻塞队列。

概述

java.util.concurrent 包里的 BlockingQueue 接口表示一个线程安放入和提取实例的队列。

特点:

BlockingQueue 通常用于一个线程生产对象,而另外一个线程消费这些对象的场景。下图是对这个原理的阐述:

一个线程往里边放,另外一个线程从里边取的一个 BlockingQueue

一个线程将会持续生产新对象并将其插入到队列之中,直到队列达到它所能容纳的临界点。

也就是说,它是有限的。如果该阻塞队列到达了其临界点,负责生产的线程将会在往里边插入新对象时发生阻塞。它会一直处于阻塞之中,直到负责消费的线程从队列中拿走一个对象。

负责消费的线程将会一直从该阻塞队列中拿出对象。直到消费线程尝试去从一个空的队列中取走对象。

继承结构

java.util.concurrent

接口 BlockingQueue<E>

|-

java.util.concurrent

类 ArrayBlockingQueue<E>

|-

java.util.concurrent

类 LinkedBlockingQueue<E>

常用的api

BlockingQueue 具有 4 组不同的方法用于插入、移除以及对队列中的元素进行检查。如果

请求的操作不能得到立即执行的话,每个方法的表现也不同。这些方法如下:

四组不同的行为方式解释:

1. 抛异常:如果试图的操作无法立即执行,抛一个异常。

2. 特定值:如果试图的操作无法立即执行,返回一个特定的值(常常是 true / false)。

3. 阻塞:如果试图的操作无法立即执行,该方法调用将会发生阻塞,直到能够执行。

4. 超时:如果试图的操作无法立即执行,该方法调用将会发生阻塞,直到能够执行,但等待时间不会超过给定值。返回一个特定值以告知该操作是否成功(典型的是 true / false)。

无法向一个 BlockingQueue 中插入 null。如果你试图插入 null, BlockingQueue 将会抛出NullPointerException。

(我是一个转行过来的java初学者,望各位看官发现文章 中的错误还望指正。走过路过点个赞支持一下呗。)

发表评论:

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言