1. 程式人生 > >學習LinkedBlockingDeque原始碼

學習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。

未完待續!