回答
HashMap
不同步,所以是的,你可能會遇到麻煩。我不確定是否存在特定的死鎖 - 我認爲這取決於實施,但最終可能會丟失信息。
另一方面,Hashtable
是同步的,應該是線程安全的。
當2個角色互相鎖定並等待資源時,會出現死鎖。
當然,使用HashMap時可能會發生死鎖。但是,死鎖是由使用HashMap的代碼完成的。
檢查你的代碼,我求答案就在其中。
哈希映射本身不會做任何鎖定。儘管如此,任何從多個線程讀取和修改相同映射的正確代碼都必須使用鎖。一旦鎖定進入圖片,就有可能發生死鎖。
不知道更多關於有多少鎖,以及如何使用它們,無法確定死鎖是否可能。
死鎖只有在您使用多個鎖並且不以正確順序鎖定/解鎖它們時纔會發生。如果您僅使用一個(正確使用的)鎖(或根本不使用)來保護您的HashMap
,則不會發生死鎖。
請注意,標準HashMap
本身不受任何保護,所以只有您的鎖定代碼(您沒有發佈)可能導致死鎖。
你真的是指一個僵局或者一個無限循環?在mutithreaded環境中使用未同步的HashMap
時,多個修改可以創建內部中斷哈希映射結構。使用Collections.synchronizedMap()
來避免這種情況。
HashMap
不是線程安全的。要使HashMap
線程安全,請使用Collections.synchronizedMap()
方法。
HashMap<K, V> map = Collections.synchronizedMap(new HashMap<K, V>());
HashMap
不是線程安全的,不會做任何鎖定。所以,你不會遇到死鎖,但是你可能得不到你想要的。事實證明,你可以在無限循環中結束,但在測試中你可能不會察覺到這一點。
java.util.concurrent.ConcurrentHashMap
是線程安全的,並提供良好的性能。但是,多線程還有很多。
我的拇指規則如果你使用''ConcurrentMap'就像普通的'Map'一樣(即只有put/get/remove),一定有什麼問題。 – bestsss 2011-12-23 01:10:04
使用未加工的HashMap
不可能發生死鎖。 HashMap
類沒有鎖定,所以沒有死鎖的機會。但是,如果您使用Collections.synchronizedMap(...)
來包裝HashMap
,並且將其與其他鎖定結合使用,則可能會發生死鎖......如果不同的線程以不同的順序獲取對象上的鎖定。
而且很明顯,多個線程訪問同一個HashMap
(這不是線程安全的)非常危險。事實上,可能有可能爲一個線程看到HashMap
,導致它進入一個無限循環的狀態不一致;例如在一個哈希鏈中出現明顯的循環。這似乎不大可能,但要確保不可能需要對代碼進行徹底分析,同時考慮到由多個線程觸發數據結構而導致的內存異常,而無需同步。
我見過HashMap
進入無限循環當它被同時修改。它與死鎖(或活鎖)無關,但它是由遍歷損壞的數據結構引起的。
這時候桶被轉換成樹節點作爲遍歷樹不會保護自己免受破壞的參考代碼特別情況。
您通常看到那麼蹤跡,其中一個線程被卡在putTreeVal
或類似的地方。
- 1. 我可以在Nunit中創建數據庫死鎖測試嗎?
- 2. ConcurrentHashMap可能「死鎖」嗎?
- 3. 如何在java中創建hashmap的hashmap?
- 4. Javascript Ajax可能導致死鎖嗎?
- 5. Java死鎖問題
- 6. Java線程死鎖
- 7. Java,線程死鎖?
- 8. 競爭文件訪問可能導致Java死鎖嗎?
- 9. 在servlet中創建死鎖的方法
- 10. 死鎖:創建(所有進程終止)
- 11. 創建我自己的Java死鎖程序
- 12. 兩個CloudKit可以相互調用死鎖嗎?怎麼修?
- 13. 可以使DCOM/COM +激活的對象死鎖CPU嗎?
- 14. 你可以在調用GC.Collect和GC.WaitForPendingFinalizers時死鎖嗎?
- 15. 可以使用sem_trywait()導致死鎖
- 16. 我可以在根安裝目錄中創建鎖而不使用鎖嗎?
- 17. 使用樂觀鎖定時可能會出現死鎖嗎?
- 18. 死鎖的線程java
- 19. Java Swing死鎖場景
- 20. Java的新手 - 死鎖仿
- 21. java + hibernate webservice - 外掛死鎖
- 22. Java Socket通信「死鎖」
- 23. Java:奇怪的死鎖
- 24. 死鎖預防(Java + MySQL)
- 25. 函數可以鎖定互斥鎖嗎?
- 26. 創建Java組合鎖
- 27. 循環可以自鎖嗎?
- 28. EF可以鎖表嗎?
- 29. Postgresql鎖死鎖
- 30. JNI:創建HashMap
他問起死鎖,不是線程安全的。 – Tudor 2011-12-22 14:39:29
有更好的替代方案,以歷史性的'Hashtable'爲例 – adarshr 2011-12-22 14:41:01
是一個'ConcurrentHashMap'。 – 2011-12-22 14:41:43