學習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。
未完待續!