Chr*_*rle 6 java multithreading thread-safety
我想测试一个ThreadLocal是否已经初始化而没有实际初始化它.当然,代码需要是线程安全的.理想情况下我想要这样的东西:
class TestableThreadLocal<T> extends ThreadLocal<T> {
public boolean isInitialized() {
...
}
}
Run Code Online (Sandbox Code Playgroud)
但是我该如何实现这种方法呢?
编辑:动机:我有一个子类ThreadLocal来覆盖initialValue().但是,我并不总是需要初始化,特别是因为它可能会导致多类加载器环境中的内存泄漏.一个简单的测试可以帮助我编写代码以避免意外初始化.
bes*_*sss 11
我倾向于使用简单的规则来避免类加载器泄漏,不可否认它们很麻烦,但有一些包装并没有那么糟糕.是的,泄漏是邪恶的.
initialValue永远不要覆盖- 你只是在寻找麻烦,只是忘记它存在.threadLocal.set(xxx); try{...process...}finally{threadLocal.set(null);}threadLocal.remove()不要使用threadLocal.set(null)WeakReferene(即ThreadLocal <WeakReference<Foo>>)来保存硬引用的池中的值.它可能看起来很直观但是一旦清除了池,值就会消失,并且类可以自由地进行GC我发现帖子不是对你的问题的直接回复,但是没有简单的方法可以达到你想要的目的并防止泄密.