學習集合框架中多執行緒相關的集合 筆記

2022-05-05 06:54:13 字數 1263 閱讀 5394

priorityblockingqueue:

這是乙個無界的阻塞佇列,使用和priorityqueue 一樣的排序規則,並且提供阻塞檢索元素操作。雖然說這個佇列在邏輯上是無界的,但是它可能會因為資源耗盡導致記憶體溢位錯誤。這個佇列也不允許出現null值元素。乙個具有優先順序的阻塞佇列依賴於comparable介面的排序規則,而且的存放到佇列中的元素必須實現comparable介面,否則會出現型別轉換異常。

這個類和他的迭代器均實現了collection和iterator 介面。迭代器由iterator()方法返回,但是返回的迭代器並不能保證的按指定的順序遍歷元素。如果需要按照指定的順序遍歷元素可以考慮使用arrays.sort() ,如,將佇列轉化為陣列,然後作為引數傳進去獲得有序的結果,arrays.sort(pq.toarray());

如果不指定初始容量,那麼預設初始容量為11. 容量在自動擴容的時候每次都是預設增長50%。

remainingcapacity(): 方法總是返回integer.max_value.因為乙個無界阻塞佇列沒有容量限制。

因為這個佇列是無界的,當使用offer(e e)方法的時候,這個方法不會返回false.當使用put(e e)方法的時候也不會阻塞。

removeat(int i):這個方法可以移除指定位置的元素,但是沒有返回值。

remove(object o):這個方法可以移除指定元素,成功放回true,否則返回false。如果這個佇列中有多個相同的元素,o.equals(e) 返回true則認為是相同,那麼它只會刪除乙個。

toarray():這個方法將會以陣列的形式返回這個佇列中的元素的,但是這個陣列中的元素並不是有序的。

concurrentlinkedqueue:

這是乙個基於鏈節點,無界的執行緒安全的佇列。這個隊裡遵循fifo原則。這個佇列適用於當多個執行緒需要同時訪問乙個普通的集合時。像其它併發集合的實現類一樣,它也不允許有null值元素。

注意,這其它集合不一樣的是,這佇列的size()方法返回的元素個數並不是準確的,比如,這個佇列在遍歷的時候它的結構被修改了(如新增或移除)。此外,大批量的操作,比如呼叫addall、removeall、retainall、containsall、equals、toarray方法,這些方法不能保證被原子性的執行。例如:乙個迭代操作和乙個addall()操作併發進行,那麼可能只能遍歷到部分新新增進來的元素。

Linux多執行緒報錯集合

在試用linux 執行緒模組時,試用pthread create 函式。編譯命令為gcc main.c o test時,會出現如下錯誤 tmp ccivh3bu.o in function main main.c text 0x81 undefined reference to pthread cr...

多執行緒下的集合安全

在多執行緒內使用集合,如果未對集合做任何安全處理,就非常容易出現系統崩潰或各種錯誤。最近的專案裡,使用的是socket通訊後再改變了某個集合,結果導致系統直接崩潰,且無任何錯誤系統彈出。經排查,發現問題是執行某集合後,系統就會在一定時間內退出,最後發現是使用的乙個字典集合出了問題。稍微思考後,就認定...

Java學習之集合框架(中)

1.map介面 1 map提供了一種對映關係,其中的元素是以鍵值對的形式儲存的,能夠實現根據key快速查詢value 2 map中的鍵值對以entry型別的物件例項形式存在的 3 key鍵不可以重複,value值可以重複 1.常用方法 1 put k key,v value 新增對映和修改對映 2 ...