【发布时间】:2018-01-15 19:21:19
【问题描述】:
考虑这样的情况。
有两个线程和一个共享资源(如 HashMap)。一个线程创建了 HashMap 并使用一些键值对对其进行了初始化,并且在初始化共享资源后,它将永远不会再被修改。
现在,第二个线程是在共享资源初始化并想要使用该资源之后严格创建的。在这一点上,我想保证第二个线程将使用正确版本的共享资源。我认为第一个线程可能在创建第二个线程之前没有将更改刷新到主内存,因此第二个线程会将共享资源的旧值放入它的缓存中。
此分析是否正确,以及如何在初始化共享资源后手动强制刷新到 Java 中的主内存,因为在这种我不想要或不需要 volatile 或 synchronized 的特殊情况下。
【问题讨论】:
-
@Robert 这根本不是真的。
-
我对您的要求有些困惑。如果您想使用“同步”使某些内容同步,请使用 ConcurrentHashmap。如果你想确保一个线程首先工作,然后另一个工作,你可以设置一个可重入锁并让第二个线程等到哈希图被释放。或者您可以用另一个线程启动一个线程,以绝对保证第二个线程将使用正确的版本。
标签: java multithreading volatile