Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.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
Java11哈希映射死锁_Java_Multithreading_Hashmap - Fatal编程技术网

Java11哈希映射死锁

Java11哈希映射死锁,java,multithreading,hashmap,Java,Multithreading,Hashmap,下面是我编写的几行代码,用于在多线程环境中测试hashmap的性能。我知道hashmap可能会导致java8死锁,但我使用的是Java11。它不会抛出任何异常,也不会停止。有人能帮我理解为什么吗?多谢各位 Response是一个非常简单的实体类 Java11实现没有引入Java.util.HashMap的线程安全实现 在JDK文档中,明确指出对Hashmap的访问是不同步的,因此多线程应用程序中的行为是不可预测的,死锁情况确实是一种可能的副作用 另外,也有人说,如果您想进行同步访问,必须使用静

下面是我编写的几行代码,用于在多线程环境中测试hashmap的性能。我知道hashmap可能会导致java8死锁,但我使用的是Java11。它不会抛出任何异常,也不会停止。有人能帮我理解为什么吗?多谢各位

Response是一个非常简单的实体类


Java11实现没有引入
Java.util.HashMap
的线程安全实现

在JDK文档中,明确指出对
Hashmap
的访问是不同步的,因此多线程应用程序中的行为是不可预测的,死锁情况确实是一种可能的副作用

另外,也有人说,如果您想进行同步访问,必须使用静态方法
Collections提供同步策略。synchronizedMap
,这段代码实现了:

Map m = Collections.synchronizedMap(new HashMap(...));
此外,请记住,在键集或值集上隐式或显式提供的迭代器也是“fail fast”,这意味着在遍历它们时,它会立即抛出一个
ConcurrentModificationException
,并且映射会在不使用迭代器本身的特定
add
remove
方法的情况下被修改

如果您希望获得更好的性能,特别是想要避免任何竞争条件,您可以选择使用
java.util.concurrent.ConcurrentHashMap
,这保证不会抛出任何
ConcurrentModificationException

在这种情况下,您也可以简单地用并发映射的实例包装映射,因此给定
K
V
键和值的类型:

Map<K,V> m = new ConcurrentHashMap<>(myHashMap);
Map m=新的ConcurrentHashMap(myHashMap);

请在问题中加入代码;不要通过外部链接提供。问题应该是自包含的。HashMap不是线程安全的,为什么您希望程序能够正确运行?