BlockingQueue家族成員一覽

      最近在複習多線程的知識,必然少不了要掃描一遍JUC包下的各個類或接口,今天就先來聊一聊阻塞隊列BlockingQueue;

      BlockingQueue是jdk1.5發佈的JUC包下的一個工具類,他提供了天生阻塞的拿(put)和取(take)元素的方法,線程安全,通過其阻塞的put、take方法能很好的實現生產者消費者模型,解決線程間的通信問題,

      下面先分別介紹其本身擁有的一些特性方法和實現類

      特性方法:

      boolean add(E e);        添加元素,成功返回true,失敗返回false,如果隊列設置了長度,超長會拋java.lang.IllegalStateException: Queue full異常

      void put(E e);               阻塞式的添加元素,如果隊列超長當前線程會一直阻塞,直到隊列裏的元素被take可以成功添加爲止

      boolean offer(E e);       添加元素,成功返回true,失敗返回false,與add的區別在於隊列滿了添加失敗不會拋異常而是返回false

      E take();                        阻塞式的獲取隊列元素,只要take不到元素當前線程會一直阻塞,直到隊列裏有元素併成功獲取

      E poll();                        從隊列頭部獲取並移除元素,獲取不到返回null

      E peek();                      從隊列頭部獲取元素但不移除元素,獲取不到返回null

     int drainTo(Collection<? super E> c);   將隊列中的元素全部移除,併發送到給定的集合中,返回的是操作成功的元素個數

     關於實現類我也不想利用文本的方式一個個列起來了,下面直接附上我整理的思維導圖的部分截圖,簡單明瞭:

            需要注意的是,BlockingQueue的一衆實現類是線程池接收任務隊列的多種實現,不同的隊列應用於不同場景下的線程池;後面會抽時間寫一篇關於線程池的總結筆記

 

         

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章