java - 非静态字段在只有一个实例的类中是否有意义
问题描述
我遇到了一段代码,我对类定义感到困惑。
课程是:
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 实例的每个线程是否会有这些非静态成员的单独副本?
解决方案
拥有非静态成员是否有意义
当然,因为仍然存在该类的一些实例
这些非静态成员有单独的副本
不,只有一个静态TestData
实例,因此只存储该实例的字段
推荐阅读
- javascript - Next.JS 静态站点生成和客户端 Apollo 获取
- android - 如何在 Android 应用程序运行时修改或添加资源?
- python - 将一列与另一数据框列匹配并粘贴第二个数据中的值 - Python
- flutter - 如何用 dart 语言编写一个函数,该函数返回一个带有来自 GitHub 作业的作业列表的 Future?
- selenium - 如何从 selenium webdriver java 中的动态搜索框中选择一个值?
- javascript - 错误 [ERR_MODULE_NOT_FOUND]:找不到包 '.data'
- python - Kivy-ios:尝试构建 kivy 时工具链构建失败
- flutter - 颤振状态栏颜色不变
- python - 我如何在 python 中编写这个,最好是在 pandas 中?(假设我正在处理一个数据框)
- sql - 带有一些连接的分层查询