學習LinkedBlockingDeque源碼

以前已經看了實現deque接口的ArrayDeque, ConcurrentLinkedDeque, LinkedList,也不能落下ConcurrentLinkedDeque,可是好像沒在項目中用過。node

這裏看到實現的接口還有BlockingDeque<E>, BlockingQueue<E>,咱們先列一下原先deque的方法,在隊首隊尾的操做。函數

而後前面加個blocking的接口會是怎麼樣的?比起以前的Throws exception和Special value,多了Blocks和Times out。blog

在LinkedBlockingDeque中有一個表示節點靜態內部類,而後有屬性 transient Node<E> first和transient Node<E> last接口

對於LinkedBlockingDeque的構造函數,Integer.MAX_VALUE表示的是最大容量。ci

後續看看Blocks的方法,putFirst(E e)裏面加了ReentrantLock,而後調用的是linkFirst(Node<E> node,單是看這裏,感受和offerFisrt(e)方法沒什麼區別it

對於offerFirst(e, time, unit)方法,這裏咱們加了timeout的邏輯io

再看takeFisrt()方法吧,調用的是unlinkFirst()方法沒若是返回爲null,則調用notEmpty.await()方法。ast

看到pollFirst(time,unit)的處理邏輯也是差很少的List

對於putLast(e),takeLast(),offerLast(e, time, unit),pollLast(time, unit)和隊首操做也是相似的操做,這個類最大的特色就是使用ReentrantLock。exception

未完待續!

相關文章
相關標籤/搜索