关于在struts2 action中使用ThreadLocal
每次action调用时,都用
log.debug("current thread.id={}",Thread.currentThread().getId());输出当前线程的id。
log.debug("current thread.id={}",Thread.currentThread().getId());输出当前线程的id。
在多次action调用中,有可能会得到同一个线程id,这样话如果使用ThreadLocal就会得到上一次调用时的那个ThreadLocal变量,我怎么做才能保证每次线程id不同呢。
为什么每次都会得到同一个线程id呢,跟threadpool有关吗?求解释
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(11)
我说的事后清理 是在 try-catch的finally块里面进行的,所以没有出现异常就不清理的问题
我这里理论上出异常的地方太多了,每个catch都写不合适
我是在Filter里面加的清理 所以不管里面怎么异常 过滤器总是在外围
两个月以后,我发现使用前和使用后都要清理才行,使用后清理是为了尽早让gc回收不用的资源,不然正如
@逝水fox 所说会造成泄漏;使用前清理是因为,有可能上次出现异常而没有运行到清理localThread的程序,导致在使用线程池的清况下,再次访问到未清理的localThread。
我更赞成
@逝水fox 的说法
使用前初始化下
就算没有线程池,清理也是必须的。线程消亡的时候,
ThreadLocal不会自动删除对应的资源的,否则会造成泄漏。
清理清理
看来用完ThreadLocal后得清理清理了
感谢,果然和线程池有关
看 threadLoacal源码分析 这有两篇文章给你参考
理解ThreadLoacal
threadLocal认识的几个误区