java – ThreadLocal资源

weixin_38086437 2019-09-12 12:26:23
当我强烈引用持有资源的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表明; All of its copies of thread-local instances are subject to garbage collection (unless other references to these copies exist). 如果是这种情况,那么如何确保副本始终可用?
...全文
11 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
weixin_38103449 2019-09-12
  • 打赏
  • 举报
回复
您的代码的问题是您将保持文件指针打开.您可以将对象存储在ThreadLocal中,但不存储诸如文件句柄,数据库连接或其他需要关闭的资源等资源. ThreadLocal将超出范围,因此一旦Thread完成就会被垃圾收集.在您的情况下,我将存储您从ThreadLocal中的InputStream获取的内容,但不存储流本身.如果您想确保某些内容始终可用,请使用Singleton模式.请注意Java EE环境中模式的局限性.

433

社区成员

发帖
与我相关
我的任务
社区描述
其他技术讨论专区
其他 技术论坛(原bbs)
社区管理员
  • 其他技术讨论专区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧