摘要: 本小節是《并發容器》的最后一部分,這一個小節描述的是針對List/Set接口的一個線程版本。
在《并發隊列與Queue簡介》中介紹了并發容器的一個概括,主要描述的是Queue的實現。其中特別提到一點LinkedList是List/Queue的實現,但是LinkedList確實非線程安全的。不管BlockingQueue還是ConcurrentMap的實現,我們發現都是針對鏈表的實現,當然盡可能的使用CAS或者Lock的特性,同時都有通過鎖部分容器來提供并發的特性。而對于List或者Set而言,增、刪操作其實都是針對整個容器,因此每次操作都不可避免的需要鎖定整個容器空間,性能肯定會大打折扣。要實現一個線程安全的List/Set,只需要在修改操作的時候進行同步即可,比如使用java.util.Collections.synchronizedList(List
)或者java.util.Collections.synchronizedSet(Set)。當然也可以使用Lock來實現線程安全的List/Set。
通常情況下我們的高并發都發生在“多讀少寫”的情況,因此如果 閱讀全文