第一个线程完成时在第二个线程中使用HashMap

时间:2016-09-09 19:25:57

标签: java multithreading hashmap

如果我运行线程1并在其中创建HashMap,当线程1完成时,我可以在线程2中读取和/或修改它吗?

// thread A
// stuff
new BukkitRunnable() {
  public void run() {
    final Map<String,Boolean> map = new HashMap<String,Boolean>();
    // fill it with data...
    new BukkitRunnable() {
      public void run() {
        // use the map
      }
    }.runTask(plugin); // Running it on thread A 0.05 sec later.
  }
}.runTaskAsynchronously(plugin); // Running it on a new thread

1 个答案:

答案 0 :(得分:2)

只要在线程1中Map的最后一次更新与线程2中Map的第一次访问之间存在发生在之前的障碍,否则运行线程2的CPU的内存缓存可能看不到更改。

请参阅javadoc中的Memory Consistency Properties

所以,只是线程1完成的事实是不够的。现在,如果你在Map完成之后启动第2个线程,那么你很好,因为start()建立了这样的发生之前关系。

或者,它取决于 如何在线程之间共享Map引用。