奇怪的ThreadLocal
ThreadLocal threadLocal = new ThreadLocal();
threadLocal.set(new Object());
Object obj = threadLocal.get();
threadLocal.remove();
System.out.println(obj);
//结果是obj不为空
这就是 Java Reference 的问题了,你清空了 ThreadLocal ,但 obj 引用还在,所以不为空
这个remove和list的remove不一样,
threadlocal这里remove的是引用。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
引用来自#5楼“胖猫”的帖子
引用来自#4楼“艺术家”的帖子
引用来自#3楼“鉴客”的帖子
这就是 Java Reference 的问题了,你清空了 ThreadLocal ,但 obj 引用还在,所以不为空
引用来自#4楼“艺术家”的帖子
引用来自#3楼“鉴客”的帖子
这就是 Java Reference 的问题了,你清空了 ThreadLocal ,但 obj 引用还在,所以不为空
引用来自#3楼“鉴客”的帖子
这就是 Java Reference 的问题了,你清空了 ThreadLocal ,但 obj 引用还在,所以不为空
这就是 Java Reference 的问题了,你清空了 ThreadLocal ,但 obj 引用还在,所以不为空
remove清除的是对象内部对实例的引用,和obj没关系,
没remove之前栈中有两个变量引用着堆中的Object,