学习LinkedBlockingDeque源码

之前已经看了实现deque接口的ArrayDeque, ConcurrentLinkedDeque, LinkedList,也不能落下ConcurrentLinkedDeque,但是好像没在项目中用过。

这里看到实现的接口还有BlockingDeque<E>, BlockingQueue<E>,我们先列一下原先deque的方法,在队首队尾的操作。

然后前面加个blocking的接口会是怎么样的?比起之前的Throws exception和Special value,多了Blocks和Times out。

在LinkedBlockingDeque中有一个表示节点静态内部类,然后有属性 transient Node<E> first和transient Node<E> last

对于LinkedBlockingDeque的构造函数,Integer.MAX_VALUE表示的是最大容量。

后续看看Blocks的方法,putFirst(E e)里面加了ReentrantLock,然后调用的是linkFirst(Node<E> node,单是看这里,感觉和offerFisrt(e)方法没什么区别

对于offerFirst(e, time, unit)方法,这里我们加了timeout的逻辑

再看takeFisrt()方法吧,调用的是unlinkFirst()方法没如果返回为null,则调用notEmpty.await()方法。

看到pollFirst(time,unit)的处理逻辑也是差不多的

对于putLast(e),takeLast(),offerLast(e, time, unit),pollLast(time, unit)和队首操作也是类似的操作,这个类最大的特点就是使用ReentrantLock。

未完待续!

猜你喜欢

转载自my.oschina.net/u/2277632/blog/2986175