天天看點

java Queue中 remove/poll/take, add/offer/put, element/peek差別

項目中用到了 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。該方法是不阻塞的