同步類容器和併發類容器

2021-08-20 19:17:24 字數 753 閱讀 7996

同步類容器都是執行緒安全的,但是某些場景下可能需要加鎖來保護復合操作。復合類操作如:迭代(反覆訪問元素,遍歷完容器中所有的元素)、跳轉(根據指定的順序找到當前元素的下乙個元素)、以及條件運算。這些復合操作在多執行緒併發地修改容器時,可能會表現出意外的行為,最經典的便是concurrentmodificationexception,原因是當容器迭代的過程中,被併發的修改了內容,這是由於早期迭代器設計的時候並沒有考慮併發修改的問題。

同步類容器:如古老的vector、hashtable。這些容器的同步功能其實都是由jdk的collections.synchronized**等工廠方法去建立實現的,其低層的機制無非就是用傳統的synchronized關鍵字對每個公用的方法都進行同步,使得每次只能有乙個執行緒訪問容器的狀態。但是這明顯不滿足我們今天網際網路時代高併發的需求,在保證執行緒安全的時候,也必須要有足夠好的效能。

為了滿足網際網路的高併發需求,jdk1.5後提供了併發類容器來替代同步類容器從而改善效能。同步類容器的狀態都是序列化的。他們雖然實現了執行緒安全,但是嚴重降低了併發性,在多執行緒環境時,嚴重降低了應用程式的吞吐量。

併發類容器是專門針對併發設計的,例如使用concurrenthashmap來代替給予雜湊的傳統的hashtable,並且在concurrenthashmap中,新增了一些常見復合操作的支援,就是上面說到的。還有使用copyonwritearraylist來代替voctor,還有併發的copywritearrayset,併發queue(concurrentlinkedqueue和linkedblockingqueue)等。

同步類容器和併發類容器

同步類容器都是執行緒安全的,但在某些場景下可能需要加鎖來保護復合操作。復合類操作。如 迭代 反覆訪問元素,遍歷完容器中所有的元素 跳轉 根據指定的順序找到當前元素的下乙個元素 以及條件運算。這些復合操作在多執行緒併發地修改容器時,可能會表現出意外的行為,最經典的便是concurrentmodific...

同步類容器和併發類容器

同步類容器都是執行緒安全的,同步容器類包括 vector 和 hashtable,二者都是早期 jdk 的一部分,此外還包括在 jdk1.2 當中新增的一些功能相似的類,這些同步的封裝類是由 collections.synchronized 等工廠方法建立的。但在某些場景下可能需要加鎖來保護復合操作...

同步類容器和併發類容器

一 同步類容器 同步類容器都是執行緒安全的,但在某些場景下可能需要加鎖來保護復合操作。復合類操作如 迭代 反覆訪問元素,遍歷完容器中的所有元素 跳轉 根據指定的順序找到當前元素的下乙個元素 以及條件運算。這些復合操作在多執行緒併發的修改容器時,可能會表現出意外的行為,最經典的便是concurrent...