从不是在声明的地方的类访问Java ThreadLocal对象

问题描述 投票:0回答:1

我正在声明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变量。

不幸的是,这是一个继承的技术设计。

java multithreading threadpool thread-local
1个回答
0
投票

它是threadlocal的事实是不相关的。您在问:我可以从另一个班级访问一个私有字段吗?

答案是:并非如此。如果您具有要访问该字段的Blah实例(这是一个非静态字段;因此,每个Blah实例都有一个threadlocal),则可以使用java.lang.reflection:

Field f = Blah.class.getDeclaredField("numberThreaLocalObj");
f.setAccessible(true);
ThreadLocal<?> t = f.get(someInstanceOfBlah);
t.set(null);

一旦添加适当的异常警卫,便会这样做。

© www.soinside.com 2019 - 2024. All rights reserved.