首页 > 解决方案 > 非静态字段在只有一个实例的类中是否有意义

问题描述

我遇到了一段代码,我对类定义感到困惑。

课程是:

public class TestData {

    private ThreadLocal<Data> threadLocalData = new ThreadLocal<>();
    private UUID id = UUID.randomUUID();
    private static final TestData testData = new TestData();
    private static final Logger ogger = LoggerFactory.getLogger("data");


    private TestData() {
    }

    public static TestData getTestData() {
        return testData;
    }

    public void addTestData(String key) {
        Data data = new Data(key);

        threadLocalData.set(data);
    }

    public ThreadLocal<Data> getThreadLocalData() {
        return threadLocalData;
    }
}

这在另一个类中被引用为:

TestData.getTestData().getThreadLocalData().set(new Data());

所以,我的疑问是,如果所有线程都使用这个类的单个实例,那就是:

private static final TestData testData = new TestData();

那么在类中有非静态成员是否有意义?

    private ThreadLocal<Data> threadLocalData = new ThreadLocal<>();
    private UUID id = UUID.randomUUID();

如果是,那么使用 testData 实例的每个线程是否会有这些非静态成员的单独副本?

标签: java

解决方案


拥有非静态成员是否有意义

当然,因为仍然存在该类的一些实例

这些非静态成员有单独的副本

不,只有一个静态TestData实例,因此只存储该实例的字段


推荐阅读