前言 ThreadLocal 的作用是提供线程内的局部变量,这种变量在线程的生命周期内起作用,减少同一个线程内多个函数或者组件之间一些公共变量的传递的复杂度。但是如果滥用 ThreadLocal,就可能会导致内存泄漏。下面,我们将围绕三个方面来分析 ThreadLocal 内存泄漏的问题 Threa ...
分类:
其他好文 时间:
2017-11-24 00:15:23
阅读次数:
179
使用ThreadLocal并且有线程池时要特别注意,ThreadLocal是以线程为key的,而线程池里面的线程是会被重新利用的,所以如果有使用线程池并且使用ThreadLocal来保存状态信息时要特别注意要每次初始化,否则同一个线程会用到之前线程的状态信息,代码见http://www.macroh ...
分类:
编程语言 时间:
2017-11-24 00:11:31
阅读次数:
154
最近遇到一个比较隐蔽而又简单地问题,在使用ThreadLocal时发现出现多个线程中值串来串去,排查一番,确定问题为线程池的问题,线程池中的线程是会重复利用的,而ThreadLocal是用线程来做Key的所以在使用线程池的时候要特别注意ThreadLocal. ThreadLocal数据是在线程创建 ...
分类:
编程语言 时间:
2017-11-24 00:11:04
阅读次数:
309
threadlocal里面使用了一个存在弱引用的map,当释放掉threadlocal的强引用以后,map里面的value却没有被回收.而这块value永远不会被访问到了. 所以存在着内存泄露. 最好的做法是将调用threadlocal的remove方法. 在threadlocal的生命周期中,都存 ...
分类:
其他好文 时间:
2017-11-24 00:08:39
阅读次数:
107
ThreadLocal使用 ThreadLocal可以让线程拥有本地变量,在web环境中,为了方便代码解耦,我们通常用它来保存上下文信息,然后用一个util类提供访问入口,从controller层到service层可以很方便的获取上下文。下面我们通过代码来研究一下ThreadLocal。 新建一个T ...
分类:
编程语言 时间:
2017-11-24 00:05:17
阅读次数:
303
在我很多的课程里(master、concurrency、xj-conc-j8),我经常提起ThreadLocal。它经常受到我严厉的指责要尽可能的避免使用。ThreadLocal是为了那些使用完就销毁的线程设计的。线程生成之前,线程内的局部变量都会被清除掉。实际上,如果你读过 Why 0x61c88 ...
分类:
其他好文 时间:
2017-11-24 00:04:02
阅读次数:
223
对ThreadLocal的理解 ThreadLocal主要是用来存储线程内局部变量。每个线程都有自己的局部变量;这种变量在多线程环境下访问时(通过get或set方法访问)时,能保证各个线程里的变量独立于其他线程内变量之外。ThreadLocal实例通常是类中的private static字段,它们希 ...
分类:
其他好文 时间:
2017-11-22 22:07:59
阅读次数:
463
(转) http://www.cnblogs.com/moongeek/p/7857794.html ThreadLocal,即线程本地变量。它可以将变量绑定到特定的线程上的入口,使每个线程都拥有改变量的一个拷贝,各线程相同变量间互不影响,是实现共享资源的轻量级同步。 下面是个ThreadLocal ...
分类:
编程语言 时间:
2017-11-22 17:36:26
阅读次数:
193
虽然ThreadLocal与并发问题相关,但是许多程序员仅仅将它作为一种用于“方便传参”的工具,胖哥认为这也许并不是ThreadLocal设计的目的,它本身是为线程安全和某些特定场景的问题而设计的。ThreadLocal是什么呢!每个ThreadLocal可以放一个线程级别的变量,但是它本身可以被多 ...
分类:
其他好文 时间:
2017-11-20 13:20:16
阅读次数:
125
import java.util.Random; public class ThreadDemo3 { public static void main(String[] args) { for(int i=0;i<2;i++){ //两个线程 new Thread(new Runnable() { ...
分类:
编程语言 时间:
2017-11-18 18:45:34
阅读次数:
159