同步類容器

2021-09-11 04:01:01 字數 1245 閱讀 8927

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

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

concurrentmap介面:

concurrenthashmap,concurrentskiplistmap(支援併發排序功能,彌補concurrenthashmap)

concurrenthashmap內部使用段(segment)來表示這些不同部分,每個段其實就是乙個小的hashtable,他們有自己的鎖。只要每個修改操作發生在不同的段上,他們就可以併發修改操作。這也是在多執行緒場景時減小鎖的細粒度從而降低鎖競爭的一種方案。並且**中大多共享變數使用volatile關鍵字宣告,目的是第一時間獲取修改的內容,效能非常好。

copy-on-write:

簡稱cow,是一種用於程式設計中的優化策略。

jdk裡的cow容器有兩種:copyonwritearraylist和copyonwriterarrayset,cow容器非常有用,,可以再飛鏟多的併發場景中使用到。

copyonwriter容器:即寫時複製的容器。往乙個容器新增元素的時候,不直接往當前容器新增,而是先將當前容器進行copy,複製出乙個新的容器,然後新的容器裡新增新元素,新增完元素後,在講元容器的引用指向新的容器。這樣的好處就是對copyonwrite容器進行併發的讀,不需要加鎖,因為當前容器不會新增任何元素,所以copyonwiterr容器也是一種讀寫分離的思想,讀和寫不同的容器。

同步類容器和併發類容器

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

同步類容器和併發類容器

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

同步類容器和併發類容器

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