关于ThreadLocal疑问

寒心恨雪~ 2018-12-08 11:39:29
关于ThreadLocal的疑问?
1.在项目中使用ThreadLocal时,都是作为静态变量使用的,因为ThreadLocal对象会作为key放在线程的map中,如果ThreadLocal作为非静态变量使用,那么在线程中获取value时,由于ThreadLocal对象(key)不同,就会获取不到set到线程中的参数,所以大家有把ThreadLocal作为非静态变量使用过吗?怎么使用的?
2.如果ThreadLocal作为静态变量使用,ThreadLocal这个对象就不存在内存泄漏了,这个对象会一直存在,放在线程map中的value也不会在set、get、remove方法时候进行value set null了,所以当线程销毁的时候value对象也是会被断开引用,会被GC回收掉的,如果使用线程池,只需要在线程使用完的时候,调用ThreadLocal对象的remove方法就ok了。
各位同学,你们还有其他方式使用ThreadLocal吗?,是怎么使用的?以及怎么避免内存泄漏的?
...全文
259 2 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
maradona1984 2018-12-10
  • 打赏
  • 举报
回复
1.作为静态变量,减少麻烦罢了,如果你能确保ThreadLocal对象能作为一个单例存在,那自然也是可以非静态的
2.无论如何,都要remove,现在做web开发的,框架都是有线程池的,编程规范最好简单,都remove没有任何问题,对人的要求也低
  • 打赏
  • 举报
回复
单例模式下,静态不静态的不影响吧,只是jvm存放的地方不一样而已!

81,122

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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