【发布时间】:2011-06-24 10:03:02
【问题描述】:
当我强烈引用ThreadLocal 持有资源时,如下例所示;
private final static ThreadLocal<InputStream> resource = new ThreadLocal<InputStream>()
{
@Override
protected InputStream initialValue()
{
ClassLoader loader = Thread.currentThread().getContextClassLoader();
InputStream input = loader.getResourceAsStream("doc/doc.xml");
if (input == null) throw new RuntimeException("Could not locate doc.xml");
return input;
}
};
在ThreadLocal 中保存的InputStream 在什么时间/范围内不可用。我想知道当ThreadLocal 对象没有被使用时,JVM 是否会垃圾收集它的引用,因此无法访问嵌套的InputStream。
javadoc 表示;
它的所有线程本地副本 实例受到垃圾 集合(除非其他参考 这些副本存在)。
如果是这种情况,那么如何确保副本始终可用?
【问题讨论】:
标签: java multithreading