回答
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