以前已經看了實現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
未完待續!