gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 03:22:31 27 4
gpt4 key购买 nike

如果我运行线程 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 中 Map 的最后一次更新与 Map 的首次访问之间存在happens-before屏障> 在线程 2 中。否则运行线程 2 的 CPU 的内存缓存可能看不到更改。

参见Memory Consistency Properties在 javadoc 中。

因此,仅线程 1 已完成这一事实是不够的。现在,如果您在 Map 完成之前启动线程 2,那么就很好,因为 start() 建立了这样一个 < em>发生在之前的关系。

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

关于java - 当第一个线程完成时在第二个线程中使用 HashMap,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39418474/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com