同步類容器和併發類容器

2022-07-30 03:00:18 字數 883 閱讀 4968

一、同步類容器

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

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

二、併發類容器

jdk5.0以後提供了多種併發類容器來替代同步類從而改善效能。同步類容器的狀態都是序列化的。他們雖然實現了執行緒安全,但是嚴重降低了併發性,在多執行緒環境時,嚴重降低了應用的吞吐量。

併發類容器時專門針對併發設計的,使用concurrenthashmap來代替給予雜湊的傳統的hashtable,而且在concurrenthashmap中,新增了一些常見復合操作的支援。以及使用了copyonwritearrylist代替vector,併發的copyonwritearrayset以及併發的queue,concurrentlinkedqueue和linkedblockingqueue,前者是高效能的佇列,後者是以阻塞形式的佇列,具體實現queue還有很多,例如arrayblockingqueue、priorityblockingqueue、synchronousqueue等。

同步類容器和併發類容器

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

同步類容器和併發類容器

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

同步類容器和併發類容器

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