2013-07-17 45 views
0

在高級Java集合API中,我們有CopyOnWriteArrayList和ConcurrentHashMap。但這些數據結構的基本原則卻不同。即ConcurrentHashMap只鎖定正在進行寫入操作的Map的一部分。這是如何防止同步問題而不影響性能的。原理差異CopyOnWriteArrayList和ConcurrentHashMap

CopyOnWriteArrayList另一方面通過複製原始List來防止併發性問題。爲什麼這些實現如此不同? Java是否正在測試以查看哪一個更好?

回答

0

一個並行數據結構設計,保證各個業務對數據結構中的任何序列將永遠留在這是從它自己的觀點一致的狀態,而是一個「快照」通過讀取數據結構形成一個接一個可能不一定代表數據結構曾經持有的任何狀態。例如,如果一個人正在讀取一組用戶,則「Zachary」被重命名爲「Adam」,重命名的用戶可能會被讀出爲「Adam」,「Zachary」,或者都不是。即使在枚舉過程中,集合從來沒有處於用戶從不存在這兩個名稱的狀態,也不存在於任一狀態,枚舉可能會使它看起來像它一樣。

副本上寫的收集目的是讓一個以集合的整個狀態的快照,並保證有一些時刻,當集合實際上有這樣的狀態。包括快照請求在內的每個操作的結果應該與在發出請求和報告完成之間的某個離散時間點執行的每個操作一致。如果在完成之前給出兩個請求,則選擇哪個動作先於另一個是任意的,但是必須存在全局一致的排序。