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

ThreadLocal not being property set in overloaded thread constructor

我有以下 classes

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

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

下面class用来测试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();
            }
        }
    }
}

这个class用来测试datameber是否设置正确

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 运行方法。但是如果我在 Test 运行 方法中调用 ThreadLocalManager.myThreadLocal.set("HI");Liker.run() 会打印 HI

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

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

as long as they are from the same thread

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