java - 从非声明位置的类访问 Java ThreadLocal 对象
问题描述
我正在声明一个 ThreadLocal 对象并设置一个如下所示的值。
Public Class Blah {
private ThreadLocal<Set<Integer>> numberThreaLocalObj= new ThreadLocal<>();
void setValue() {
Set<Integer> numberSet = new HashSet<>();
numberSet .add(1);
threaLocalObj.set(numberSet)
}
}
无论如何在同一个线程中的这个类之外引用这个numberThreaLocalObj变量?
我发现一些代码似乎清除了所有线程局部变量,但我只需要根据条件清除这个特定的线程局部变量。
不幸的是,这是一种继承的技术设计。
编辑 - 找到解决方案,如我的回答中所述。
解决方案
它是线程本地的事实是无关紧要的。您在问:我可以从另一个类访问私有字段吗?
答案是:不是。如果您有想要访问此字段的 Blah 实例(它是一个非静态字段;因此,每个 Blah 实例都有一个 threadlocal),您可以使用 java.lang.reflection:
Field f = Blah.class.getDeclaredField("numberThreaLocalObj");
f.setAccessible(true);
ThreadLocal<?> t = f.get(someInstanceOfBlah);
t.set(null);
一旦你添加了适当的异常保护,就会这样做。
推荐阅读
- java - 为什么我不能删除这条记录(表约束) - 我正在使用 Spring 和 Hibernate
- google-apps-script - 如何使用按钮或通过编辑来触发谷歌文档脚本?
- android-studio - Android Studio 应用中图片加载缓慢
- sql - 对第三个表的 SQL 删除调用
- wpf - 如何绑定网格集合
- python - Django注释模型并过滤特定值
- python - 元组的元组作为 argparse 命令行参数
- c# - 将异步方法传递给不同的类
- express - 响应时间 - NodeJS + Express
- android - 在firebase中使用数据库时按下按钮会导致无法解释的“重定向”