浪子归家|Java并发编程-LinkedBlockingDeque详解( 二 )
putLast(E e)方法是将指定的元素插入到双端队列的末尾 , 源码如下:
public void putLast(E e) throws InterruptedException {// 若插入元素为null , 则直接抛出NullPointerException异常if (e == null) throw new NullPointerException();// 将插入节点包装为Node节点Node该方法和putFirst(E e)方法几乎一样 , 不同点在于 , putLast(E e)方法通过调用linkLast(E e)方法来插入节点:
private boolean linkLast(Node若入队成功 , 则linkLast(E e)方法返回true , 否则 , 返回false 。 若该方法返回false , 则当前线程会阻塞在notFull条件上 。
出队pollFirst()方法是获取并移除此双端队列的首节点 , 若不存在 , 则返回null , 源码如下:
public E pollFirst() {// 获取全局独占锁final ReentrantLock lock = this.lock;lock.lock();try {return unlinkFirst();} finally {// 释放全局独占锁lock.unlock();}}移除首节点的操作是通过unlinkFirst()方法来完成的:
private E unlinkFirst() {// assert lock.isHeldByCurrentThread();// 获取首节点NodepollLast()方法是获取并移除此双端队列的尾节点 , 若不存在 , 则返回null , 源码如下:
public E pollLast() {// 获取全局独占锁final ReentrantLock lock = this.lock;lock.lock();try {return unlinkLast();} finally {// 释放全局独占锁lock.unlock();}}移除尾节点的操作是通过unlinkLast()方法来完成的:
private E unlinkLast() {// assert lock.isHeldByCurrentThread();// 获取尾节点Node其实LinkedBlockingDeque类的入队、出队操作都是通过linkFirst、linkLast、unlinkFirst、unlinkLast这几个方法来实现的 , 源码读起来也比较简单 。
使用案例import java.util.Date;import java.util.concurrent.LinkedBlockingDeque;import java.util.concurrent.TimeUnit;public class LinkedBlockingDequeTest {public static void main(String[] args) throws Exception {LinkedBlockingDeque linkedBlockingDeque = new LinkedBlockingDeque(10);Thread thread = new Thread(new ClientRequest(linkedBlockingDeque));thread.start();for (; ; ) {String request = linkedBlockingDeque.take();System.out.println("Receive '" + request + "' at " + new Date() + " Size: " + linkedBlockingDeque.size());TimeUnit.SECONDS.sleep(1);}}static class ClientRequest implements Runnable {private LinkedBlockingDeque requestList;public ClientRequest(LinkedBlockingDeque requestList) {this.requestList = requestList;}@Overridepublic void run() {System.out.println("Request start");for (int i = 0; i
推荐阅读
- 逍遥浪子龙|汽车“栽进窗”,太危险!女子停车忘拉手刹
- Java|淘宝商家要小心了!取消的“中差评”体系又回来啦!
- javascript|游戏开发之旅-JavaScript重新介绍
- Java|java多线程并发小demo
- Java|java程序猿如何才能走远,怎么做自己的职业规划
- [婚外情]我结婚了但爱上了别人,心存愧疚,我想回归家庭该怎么做
- 蚂蚁花呗|血亏!阿里P8轻易把总结了近一年的java高级特性笔记送人了
- 百度|Java高级进阶多线程学习之路(七)ThreadLocal
- 足坛最前线|却被国米球迷永远拉黑,布尔迪索:潘帕斯浪子中后卫
- 土土女排|进攻实力将大幅提升,回归家乡!女排世界冠军有望加盟辽宁
