gpt4 book ai didi

java - ThreadLocal 未在重载线程构造函数中设置属性

转载 作者:行者123 更新时间:2023-12-01 09:39:27 27 4
gpt4 key购买 nike

我有以下类(class)

这个类用来保存我所有的ThreadLocal数据成员

public class ThreadLocalManager
{
public static final ThreadLocal<String> myThreadLocal = new ThreadLocal<String>();
}

下面的类用于测试ThreadLocal

public class Test extends Common implements Runnable
{
public Test(String country, String machine)
{
Common.machine = machine;
Common.country = country;
ThreadLocalManager.myThreadLocal.set("HI");
}

@Override
public void run()
{
while (true)
{
try
{
Liker liker = new Liker();
liker.run();
}
}
}
}

该类用于测试datamemeber是否设置正确

public class Liker
{
public void run()
{
System.out.println((String) ThreadLocalManager.myThreadLocal.get());
}
}

编辑

这就是我的线程的创建方式

Thread newThread = new Thread(new Test(country, machine));
newThread.start();

我感到困惑的一件事是,就像上面一样,当我在 Test 构造函数中调用 ThreadLocalManager.myThreadLocal.set("HI"); 时,我从 Liker run 方法获取 null。但是,如果我在 Test run 方法中调用 ThreadLocalManager.myThreadLocal.set("HI");Liker.run() 会打印 你好

我认为该值应该可以从所有类和对象访问,只要它们来自同一线程。当我从构造函数调用值 HI 时,为什么它没有被存储?

最佳答案

您几乎在这里回答了您的问题 -

as long as they are from the same thread

Test 方法的构造函数在不同的线程中运行,而不是在 Test::run 方法内运行的代码。

关于java - ThreadLocal 未在重载线程构造函数中设置属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38581104/

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