項目中用到了 BlockingQueue,使用take()方法擷取阻塞隊列的頭部元素,突然想起 隊列還有個 poll 方法也是傳回頭部元素,特意查了查兩個方法的差別,有個文章總結的不錯,特轉載以記錄。原貼位址:java Queue中 remove/poll/take, add/offer/put, element/peek差別
方法 | 作用 | 差别 |
---|---|---|
remove | 删除隊列裡面指定元素 | 有則删除傳回 true,沒有則傳回 false |
poll | 移除并返問隊列頭部的元素 | 如果隊列為空,則傳回null。該方法是不阻塞的 |
take | 移除并傳回隊列頭部的元素 | 如果隊列為空則阻塞調用線程。如果隊列為空則阻塞目前線程直到隊列不為空然後傳回元素,如果在阻塞的時候被其它線程設定了中斷标志,則被阻塞線程會抛出 InterruptedException 異常而傳回。 |
add | 增加一個元素 | 如果隊列已滿,則抛出一個IIIegaISlabEepeplian異常 |
offer | 添加一個元素并傳回true | 如果隊列已滿,則傳回false。如果 e 元素為 null 則抛出 NullPointerException 異常。該方法不阻塞 |
put | 添加一個元素并傳回true | 如果隊列已滿則阻塞目前線程直到隊列有空閑插入成功後傳回 true,如果在阻塞的時候被其它線程設定了中斷标志,則被阻塞線程會抛出 InterruptedException異常而傳回,另外如果 e 元素為 null 則抛出 NullPointerException 異常 |
element | 傳回隊列頭部的元素 | 如果隊列為空,則抛出一個NoSuchElementException異常 |
peek | 傳回隊列頭部的元素 | 如果隊列為空,則傳回null。該方法是不阻塞的 |