ThreadLocal使用注意事项

1,227 阅读1分钟

使用方法

ThreadLocal<String> tl=new ThreadLocal();
tl.set("this is a test");			// 设置值
tl.get(); 							// 获取值
tl.remove();						// 移除值

内存泄漏问题

ThreadLocalMap是Thread的属性,因此生命周期和Thread是一样的。

ThreadLocalMap存储值是以ThreadLocal为键,我们给的值作为值。

所以突然ThreadLocal是null了,也就是要被垃圾回收器回收了,但是此时ThreadLocalMap生命周期和Thread的一样,它不会回收,这时候就出现了一个现象。那就是ThreadLocalMap的key没了,但是value还在,这就造成了内存泄漏。

解决办法:使用完ThreadLocal后,执行remove操作,避免出现内存溢出情况。