[英]Synchronize HashMap in multithreaded environment only for put and remove
我有两个线程共享一个共同的 HashMap,一个线程将始终将对象插入 Map,第二个线程将从 HashMap 中删除对象。 我的问题是,如果这是两个线程的唯一逻辑,我应该使用同步或 ConcurrentHashMap“保护”Map,我可以有竞争条件吗? 如果是,请解释不保护 Map 的风险是什么。
谢谢
我可以有比赛条件吗
是的,没有同步或ConcurrentHashMap
。
在HashMap
的 Javadoc 中有明确说明:
请注意,此实现不是同步的。 如果多个线程同时访问hash map,并且至少有一个线程在结构上修改了map,则必须对外同步。
您有两个线程在结构上修改 map ,因此如果您使用HashMap
,则需要同步。
请解释不保护 Map 的风险是什么
未定义的行为,从做完全错误的事情(最好的未定义行为,因为您知道它需要修复),到看起来可以工作,直到您更改 JVM 版本并且它神秘地停止工作(最糟糕的一种未定义的行为)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.