ConcurrentHashMap在依賴其線程安全性但不同步詳細信息的程序中與Hashtable完全互操作。ConcurrentHashMap文檔說明
我很困惑線程安全vs同步的細節,任何人都可以告訴我一個例子嗎?
ConcurrentHashMap在依賴其線程安全性但不同步詳細信息的程序中與Hashtable完全互操作。ConcurrentHashMap文檔說明
我很困惑線程安全vs同步的細節,任何人都可以告訴我一個例子嗎?
Hashtable
上的教程一看已經每一個方法,這是一個公開的信息。例如,您可以繼承Hashtable
,添加更多方法 - 並且知道您使用的同步機制基本相同,因爲您使用相同的同步機制。
此外,您的代碼可以使用synchronized (myHashTable)
塊,從而有效確保在您處於此塊中時不會從其他線程中調用myHashTable
方法。
這就是所有「同步細節」哪些是您可以使用的,哪些是您自由使用的(雖然不鼓勵)。
並非如此,ConcurrentHashMap
:它是爲線程安全的(甚至更因此在某種意義上,見例如由Peter Lawrey答案)作爲Hashtable
,但你沒有告訴這個線程安全是如何實現的。因此,您不能隨意濫用或擴展它:您應該按原樣使用它。
ConcurrentHashMap
允許從多個線程同時修改地圖而不需要阻止它們。
通用線程安全got-cha是對於keySet(),entrySet()或values()方法返回的迭代器iterator()
對於Hashtable,Vector,Collection.synchronizedXxxx(collection)而言不是線程安全的。雖然該方法本身是線程安全的,只要它返回一個迭代器就可能失效。
ConcurrentHashMap沒有這個問題,因爲它提供了弱一致性。即任何添加,刪除,但不能看到迭代,但其他條目顯示爲預期。
現貨,謝謝! – flash 2012-01-04 15:18:21