執行緒安全15 併發佇列

2021-08-28 01:23:36 字數 972 閱讀 6864

併發無阻塞佇列:concurrentlinkedqueue

concurrentlinkedqueue無阻塞、無鎖、高效能、無界、執行緒安全,效能優於blockingqueue、不允許null值

併發阻塞佇列:arrayblockingqueue

基於陣列實現的阻塞有界佇列、建立時可指定長度,內部實現維護了乙個定長陣列用於快取資料,內部沒有採用讀寫分離,寫入和讀取資料不能同時進行,不允許null值

併發阻塞佇列:linkedblockingqueue

基於鍊錶的阻塞佇列,內部維護乙個鍊錶儲存快取資料,支援寫入和讀取的併發操作,建立時可指定長度也可以不指定,不指定時代表無界佇列,不允許null值

併發阻塞佇列:synchronousqueue

沒有任何容量,必須現有執行緒先從佇列中take,才能向queue中add資料,否則會丟擲佇列已滿的異常。不能使用peek方法取資料,此方法底層沒有實現,會直接返回null

併發阻塞佇列:priorityblockingqueue

乙個無界阻塞佇列,預設初始化長度11,也可以手動指定,但是佇列會自動擴容。資源被耗盡時導致outofmemoryerror。不允許使用null元素。不允許插入不可比較的物件(導致丟擲classcastexception), 加入的物件實現comparable介面

併發阻塞佇列:delayqueue

delayed 元素的乙個無界阻塞佇列,只有在延遲期滿時才能從中提取元素。該佇列的頭部是延遲期滿後儲存時間最長的delayed 元素。如果延遲都還沒有期滿,則佇列沒有頭部,並且poll 將返回null。當乙個元素的getdelay(timeunit.nanoseconds) 方法返回乙個小於等於0 的值時,將發生到期。即使無法使用take 或poll 移除未到期的元素,也不會將這些元素作為正常元素對待。例如,size 方法同時返回到期和未到期元素的計數。此佇列不允許使用null 元素。內部元素需實現delayed介面

場景:快取到期刪除、任務超時處理、空閒鏈結關閉等

《併發程式設計》 15 執行緒安全的HashMap

眾所周知,hashmap是執行緒不安全的。但是如果需要乙個執行緒按鈕的hashmap我們需要怎麼做的。其中乙個可行的辦法就是collections.synchronizedmap。如下 就是執行緒安全的hashmap public static map m collections.synchroni...

多執行緒 安全併發

同乙個,同時,多個 則執行緒會不安全 synchronized鎖物件,不是鎖方法 目標不對鎖定失敗,選好要鎖的物件,不是提款機,是提款人 public synchronized void test public void run 顧客 static class customer implements...

訊息佇列 執行緒安全

為什麼在互斥量的基礎上還需要加條件變數?需要注意的是 include int pthread cond wait pthread cond t cv,pthread mutex t mutex 返回值 函式成功返回0 任何其他返回值都表示錯誤 函式將解鎖mutex引數指向的互斥鎖,並使當前執行緒阻塞...