Java Hashmap并发问题

Java Hashmap并发问题,java,concurrency,Java,Concurrency,互联网上到处都说hashmap不是线程安全的。使用替代品 但在同时使用hashmap时会发生什么具体问题呢?您能提供具体的例子吗。请考虑以下我们引发错误的例子: Map<Object, Object> test = new HashMap<>(); new Thread() { @Override public void run() { for (;;) test.put(Math.random

互联网上到处都说hashmap不是线程安全的。使用替代品


但在同时使用hashmap时会发生什么具体问题呢?您能提供具体的例子吗。

请考虑以下我们引发错误的例子:

    Map<Object, Object> test = new HashMap<>();

    new Thread() {
      @Override
      public void run() {
        for (;;)
          test.put(Math.random(), Math.random());
      }
    }.start();

    for (;;)
      for (Entry<Object, Object> e : test.entrySet())
        System.out.println(e);
Map test=newhashmap();
新线程(){
@凌驾
公开募捐{
对于(;;)
test.put(Math.random(),Math.random());
}
}.start();
对于(;;)
对于(条目e:test.entrySet())
系统输出打印ln(e);
有两个线程访问映射“test”。一个在地图上插入,另一个在地图上迭代。你会立即得到一个CONTRONTRONTIVICIOPATION异常,因为第一个线程插入,而第二个线程在迭代之前的映射状态中间。
线程安全映射实现将快照映射状态并忽略随后发生的更改。

您的程序可能会引发意外的异常,或者哈希映射可能会给出错误的结果。这不是明确的行为。不要这样。对于这样的问题,你应该有一个具体的例子。一般来说,这里的人不会回答广泛的问题。尽量缩小问题范围,并提供一个代码示例。这是否回答了您的问题@汤姆的种族状况太笼统了。我需要具体的例子。如下