java併發程式設計實戰 基礎構建模組2

2021-08-03 12:14:44 字數 1581 閱讀 1617

1,通過併發容器來替代同步容器,可以極大地提高伸縮性並降低風險

2,concurrenthashmap

2.1,用來替代同步的map,同map一樣也是基於雜湊的map。

2.2,但是它使用一種更加細粒度的加鎖機制(分段鎖lockstriping)來實現大程度的共享。

2.3,它允許多個執行緒同時對容器進行讀寫操作,在併發訪問環境下實現更高的吞吐量,在單執行緒中也只損失非常小的效能,

2.4,它在迭代時不會丟擲concurrentmodificationexception,不需要在迭代過程中對容器加鎖,它的迭代器具有弱一致性,並非「及時失敗」。,22.5,併發容器的size和isempty只是乙個近視值,無法再併發環境下提供乙個精確值,但是這些值在併發環境下用處也很小,通過弱化這些操作,以換取其他操作新能的提公升,包括get,put,containskey和remove等

2.6,於hashtable和synchronizedmap相比,concurrenthashmap有著更多的優勢以及更少的劣勢,因此在大多情況下使用concurrenthashmap來代替同步map能進一步提高**的可伸縮性

2.7,只有在應用程式需要以加鎖map以進行獨佔訪問時,才應該放棄使用concurrenthashmap

2.8,concurrenthashmap中沒有實現對map加鎖以提供獨佔訪問,因此也無法使用客戶端加鎖機制來建立新的原子操作。

3,copyonwritearraylist

3.1,它用於替代同步list,在迭代期間不需要對容器進行加鎖或複製,類似的使用copyonwritearrayset替代同步set

3.2,它迭代器不會丟擲concurrentmodificationexception,並且返回的元素與迭代器建立時的元素完全一致,而不必考慮之後修改操作所帶來的影響

3.3,每當修改容器時都會複製底層陣列,這需要一定的開銷。僅當迭代操作遠遠多於修改操作是才能使「寫入時複製」容器

4,阻塞佇列blockingqueue

4.1,阻塞佇列提供了可阻塞的put和take方法,以及支援定時的offer和poll方法

4.2,在構建高可用的應用程式時,有界佇列是一種強大的資源管理工具,他們能抑制並防止產生過多的工作項,使應用程式在負荷過載的情況下變得更加健壯

4.3,阻塞佇列包括:linkedblockingqueue,arrayblockingqueue,priorityblockingqueue。還有乙個synchronousqueue,它維護的是一組執行緒,而不是資料,它會一直阻塞直到有另乙個執行緒已經準備好參與到交付過程中。

4.4,僅當有足夠多的消費者,並且總有乙個消費者準備好獲取交付的工作時,才適合使用同步佇列

5,雙端佇列deque

5.1,正如阻塞佇列適用於生產者消費者模式,雙端佇列同樣適用於另一種模式,即工作密取(workstealing)

5.2,工作密取指的是每個消費者都有各自的雙端佇列,如果乙個消費者完成了自己雙端佇列中的全部工作,那麼它可以秘密地從其他消費者佇列末尾獲取工作。工作密取可以極大的減少競爭,比傳統的生產者消費者模式具有更高的可伸縮性

Java併發程式設計實戰 第5章 基礎構建模組

同步容器類 併發容器 阻塞佇列和生產者 消費者模式 序列執行緒封閉 執行緒間轉移物件所有權,之前的所有者不會再訪問它 deque blockingdeque 對queue和blockingqueue進行擴充套件 工作密取 乙個工作者要訪問另乙個工作者的佇列,會從尾部獲取,降低佇列上的競爭程度 阻塞方...

《java 併發程式設計實戰》基礎構建筆記

5.1.1 同步容器類的問題,在多執行緒的情況下,如,a 執行緒 對vector 執行 get 操作,另外乙個執行緒對vector 進行delete 操作,由於執行緒交替執行,可能有乙個執行緒獲取下標 為9 但是另外乙個執行緒已經刪除了下標為9的資料,導致陣列下標越界,所以對同步容器進行復合操作,在...

Java併發程式設計基礎構建模組(01) 同步容器類

vector同步實現方式是在方法上新增synchronized同步。synchronizedlist方法得到的執行緒安全容器是建立乙個鎖物件,每個操作都給這個物件加鎖,讓當前執行緒持有這個鎖,簡單的說就是鎖的物件不同,vector是synchronized this synchronizedlist...