LinkedBlockingQueue 详解
LinkedBlockingQueue 是 Java 并发包 java.util.concurrent 提供的一个集合类。
LinkedBlockingQueue 提供了 add()、put()、offer() 方法来添加元素,提供了 peek()、take()、poll() 方法来获取队首元素。
往队列中添加元素
offer 方法源码如下:
|
|
add 方法源码如下:
|
|
add 方法简单地调用了 offer 方法,区别在于当添加元素失败的时候会抛出异常。
接着看一下 put 方法:
|
|
add()、put()、offer() 方法都可以添加元素,区别在于对于队列数量已满情况下的处理,当队列元素已满时,offer 方法会返回 false、ad d 方法会抛出异常、而 put 方法会暂停当前线程直至有空闲空间。
从队列中取元素
下面看一下 peek 的源码:
|
|
由源码可知,peek 方法只是返回队首元素的值,队首元素并未出队。
poll 方法源码:
|
|
最后看一下 take 方法的源码:
|
|
peek()、take()、poll() 方法都可以获取队首元素,区别在于当队列元素数量为空的时候,peek() 和 poll() 方法会返回 null, 而 take() 方法会暂停当前线程直至队列中存在新的元素。还有一点,peek 方法只是返回队首元素的值,队首元素并不会出队。