Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/357.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在多线程环境中仅为put和remove同步HashMap_Java_Multithreading_Concurrency_Hashmap_Synchronization - Fatal编程技术网

Java 在多线程环境中仅为put和remove同步HashMap

Java 在多线程环境中仅为put和remove同步HashMap,java,multithreading,concurrency,hashmap,synchronization,Java,Multithreading,Concurrency,Hashmap,Synchronization,我有两个线程共享一个公共HashMap,一个线程将始终向映射中插入一个对象,第二个线程将从HashMap中删除对象。 我的问题是,如果这是两个线程的唯一逻辑,那么我应该使用synchronize或ConcurrentHashMap“保护”映射,我可以有一个竞争条件吗? 如果是,请解释不保护地图的风险 谢谢 能给我一个比赛条件吗 是,不同步或ConcurrentHashMap 在以下文件中有明确规定: 请注意,此实现未同步。如果多个线程同时访问哈希映射,并且至少有一个线程在结构上修改了该映射,则必

我有两个线程共享一个公共HashMap,一个线程将始终向映射中插入一个对象,第二个线程将从HashMap中删除对象。 我的问题是,如果这是两个线程的唯一逻辑,那么我应该使用synchronize或ConcurrentHashMap“保护”映射,我可以有一个竞争条件吗? 如果是,请解释不保护地图的风险

谢谢

能给我一个比赛条件吗

是,不同步或
ConcurrentHashMap

在以下文件中有明确规定:

请注意,此实现未同步。如果多个线程同时访问哈希映射,并且至少有一个线程在结构上修改了该映射,则必须在外部对其进行同步

有两个线程在结构上修改映射,因此如果使用
HashMap
,则需要同步

请解释不保护地图的风险是什么

未定义的行为,从做完全错误的事情(最好的未定义行为,因为您知道它需要修复),到看起来正常工作,直到您更改JVM版本,它神秘地停止工作(最糟糕的未定义行为)

能给我一个比赛条件吗

是,不同步或
ConcurrentHashMap

在以下文件中有明确规定:

请注意,此实现未同步。如果多个线程同时访问哈希映射,并且至少有一个线程在结构上修改了该映射,则必须在外部对其进行同步

有两个线程在结构上修改映射,因此如果使用
HashMap
,则需要同步

请解释不保护地图的风险是什么


未定义的行为,从做完全错误的事情(最好的未定义行为,因为您知道它需要修复),到看起来正常工作,直到您更改JVM版本,它神秘地停止工作(最糟糕的未定义行为).

最糟糕的问题是得到表面上正确但实际上错误的结果。用
HashMap
s来命名另一个众所周知的竞争条件症状,就是陷入无限循环。但是在不保护地图的情况下,通过地图交换的对象的状态也会受到数据竞争的影响。事实上,可能会发生各种各样的事情。最糟糕的问题是得到表面上正确但实际上错误的结果。用
HashMap
s来命名另一个众所周知的竞争条件症状,就是陷入无限循环。但是在不保护地图的情况下,通过地图交换的对象的状态也会受到数据竞争的影响。事实上,可能会发生各种各样的事情。