我正在声明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变量?
我发现一些代码似乎清除了所有threadlocals,但我只需要根据条件清除此特定的Threadlocal变量。
不幸的是,这是一个继承的技术设计。
它是threadlocal的事实是不相关的。您在问:我可以从另一个班级访问一个私有字段吗?
答案是:并非如此。如果您具有要访问该字段的Blah实例(这是一个非静态字段;因此,每个Blah实例都有一个threadlocal),则可以使用java.lang.reflection:
Field f = Blah.class.getDeclaredField("numberThreaLocalObj");
f.setAccessible(true);
ThreadLocal<?> t = f.get(someInstanceOfBlah);
t.set(null);
一旦添加适当的异常警卫,便会这样做。