Java併發編程實戰 第5章 基礎構建模塊

委託是創建線程安全類的一個最有效的策略:只需讓現有的線程安全類管理所有的狀態即可。

5.1 同步容器類

如果不希望在迭代期間對容器加鎖,那麼一種替代方案就是克隆容器,並在副本上進行迭代。由於副本被封閉在線程內,因此其他線程不會在迭代期間對其修改。
容器的toString、hashCode、equals方法都隱含了迭代操作

5.2 併發容器

同步容器將對容器狀態的訪問都串行化,以實現線程安全性,這會嚴重降低併發性,吞吐量降低。

5.2.1 ConcurrentHashMap

併發下實現更高的吞吐量,單線程環境中損失較小的性能。

5.2.3 CopyOnWriteArrayList

寫入時複製
每次修改時,都會創建並重新發佈一個新的容器副本。修改時會複製底層數組,開銷較大。適用於僅當迭代操作遠遠多於修改操作時。

5.3 阻塞隊列和生產者-消費者模式

在構建高可靠的應用程序時,有界隊列是一種強大的資源管理工具:它們能抑制並防止產生過多的工作項,使應用程序在負荷過載的情況下變得更加健壯。
BlockingQueue實現:
1、FIFO:LinkedBlockingQueue,ArrayBlockingQueue
2、優先級:PriorityBlockingQueue,可以實現對象的comparable方法,也可以使用Comparator比較器。
3、同步隊列,SynchronousQueue,沒有維護存儲空間,維護一組線程。put和take會一直阻塞,直到有另一個線程已經準備好參與到交付過程。適用有足夠多的消費者,並且總是有一個消費者準備獲取交付的工作。

5.3.2 串行線程封閉

同步機制保證對象從生產者線程安全的發佈到消費者線程。

5.3.3 雙端隊列與工作密取

一個消費者完成了自己雙端隊列中的工作,那麼take已從其他消費者雙端隊列的末尾祕密地獲取工作。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章