繁体   English   中英

在多线程环境中同步 HashMap 仅用于放置和删除

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM