gpt4 book ai didi

java - 线程之间共享hashmap

转载 作者:太空宇宙 更新时间:2023-11-04 08:08:51 25 4
gpt4 key购买 nike

我有课

class A {
private static HashMap hash;
public static void setHash(HashMap hash)
{
this.hash=hash;
}
public static HashMap getHash()
{
return hash;
}
}

我有两个线程线程 A 和线程 B

public class ThreadA implements Runnable
{
private HashMap hash;
public ThreadA(HashMap hash)
{
this.hash = hash
}
}

同样,对于ThreadB

在主类中我执行以下操作

main()
{
// inserted some values in hashmap
Thread t1 = new Thread(new ThreadA(hash));
Thread t2 = new Thread(new ThreadB(hash));
}

还有一个线程 C 使用 hash 的 setter 方法来更改 hashmap。新值不会反射(reflect)在线程 A 和 B 中。可能是什么问题呢?谢谢!

最佳答案

ThreadAThreadB 都在其构造函数中接收 HashMap,而不是类 A 的对象。

即使您稍后更改 A 类对象的 hash 属性,也不会更改两个线程已接收并存储的 HashMap 引用。

如果您想确保两个线程都可以访问新的 HashMap,则必须为它们提供新的引用(因此您还需要在 ThreadA 中创建一个 setter 方法,并在某处存储对 ThreadA 对象的引用,以便稍后可以调用该 setter),或者直接传递 A 类的对象。

关于java - 线程之间共享hashmap,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11606708/

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