阻塞隊列BlockingQueue的使用

在新增的Concurrent包中,BlockingQueue很好的解決了多線程中,如何高效安全“傳輸”數據的問題。通過這些高效並且線程安全的隊列類,爲我們快速搭建高質量的多線程程序帶來極大的便利。本文簡要介紹下BlockingQueue接口中幾個方法的作用及區別。

  1. boolean add(E e)
    (1)在不違反容量限制的情況下,可立即將指定元素插入此隊列,成功返回true。
    (2)當無可用空間時候,拋出IllegalStateException異常
    (3)當所添加的元素與隊列中的元素類型不匹配,不能夠完成類型轉換的時候,拋出ClassCastException異常
    (4)該方法要求不能夠向隊列中添加null,因此當所添加的元素爲空的時候,會拋出NullPointerException異常
    (5)拋出 IllegalArgumentException:if some property of the specified element prevents it from being added to this queue(不明白什麼情況)
  2. boolean offer(E e)
    (1)在不違反容量限制的情況下,可立即將指定元素插入此隊列,成功返回true,當無可用空間時候,返回false。
    (2)當所添加的元素與隊列中的元素類型不匹配,不能夠完成類型轉換的時候,拋出ClassCastException異常
    (3)該方法要求不能夠向隊列中添加null,因此當所添加的元素爲空的時候,會拋出NullPointerException異常
    (4)拋出 IllegalArgumentException:if some property of the specified element prevents it from being added to this queue(不明白什麼情況)
  3. void put(E e)
    (1)直接在隊列中插入元素,當無可用空間時候,阻塞等待。
    (2)如果阻塞等待被中斷,拋出異常InterruptedException
    (3)當所添加的元素與隊列中的元素類型不匹配,不能夠完成類型轉換的時候,拋出ClassCastException異常
    (4)該方法要求不能夠向隊列中添加null,因此當所添加的元素爲空的時候,會拋出NullPointerException異常
    (5)拋出 IllegalArgumentException:if some property of the specified element prevents it from being added to this queue(不明白什麼情況)
  4. boolean offer(E e, long time, timeunit unit)
    (1)將給定元素在給定的時間內設置到隊列中(入隊),如果設置成功返回true, 否則返回false。
    (2)如果在指定的阻塞時間內中斷,則會拋出異常InterruptedException
    (3)當所添加的元素與隊列中的元素類型不匹配,不能夠完成類型轉換的時候,拋出ClassCastException異常
    (4)該方法要求不能夠向隊列中添加null,因此當所添加的元素爲空的時候,會拋出NullPointerException異常
    (5)拋出 IllegalArgumentException:if some property of the specified element prevents it from being added to this queue(不明白什麼情況)
  5. E take()
    (1)獲取並移除隊列頭部的元素,無元素時候阻塞等待。
    (2)如果在阻塞等待的過程中被中斷,拋出異常InterruptedException
  6. E poll( long time, timeunit unit)
    (1)在指定的時間內進行出隊的操作,返回隊首的元素。
    (2)如果在指定時間進行等待的過程被中斷,則會拋出異常InterruptedException
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章