在新增的Concurrent包中,BlockingQueue很好的解決了多線程中,如何高效安全“傳輸”數據的問題。通過這些高效並且線程安全的隊列類,爲我們快速搭建高質量的多線程程序帶來極大的便利。本文簡要介紹下BlockingQueue接口中幾個方法的作用及區別。
- 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(不明白什麼情況) - 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(不明白什麼情況) - 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(不明白什麼情況) - 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(不明白什麼情況) - E take()
(1)獲取並移除隊列頭部的元素,無元素時候阻塞等待。
(2)如果在阻塞等待的過程中被中斷,拋出異常InterruptedException - E poll( long time, timeunit unit)
(1)在指定的時間內進行出隊的操作,返回隊首的元素。
(2)如果在指定時間進行等待的過程被中斷,則會拋出異常InterruptedException