Java并发--ThreadLocal

时间:2021-09-01 23:12:16   收藏:0   阅读:17

ThreadLocal 用于存储线程私有的对象。

查看 Thread 类的源码可以发现,每个 Thread 对象中都会有一个 ThreadLocalMap 的属性,它是一个 HashMap 结构, key 是 ThreadLoacl 对象, value 是该 ThreadLocal 存储的 Object。

线程初始时,ThreadLocalMap 是空的,当我们需要为线程设置它的私有对象时,可以新建一个 ThreadLocal 对象,像这样:

ThreadLocal<Object> threadLocal = new ThreadLocal<Object>();

它的主要方法有:

public T get() { }  
public void set(T value) { }  
public void remove() { }  
protected T initialValue() { } 

然后可以通过 set 方法放进去一个对象,可以通过 get 方法获取对象。

ThreadLocal 和它的 Object 就是存在了该线程的 ThreadLocalMap 中,所以很明显是线程私有的。

如果线程挂了,ThreadLocalMap 失去引用,就会被回收掉。

ThreadLocalMap 中存储的键值对数量也就是 ThreadLocal 的数量,一般来说 ThreadLocal 数量很少。我们也可以在 ThreadLocal中 用 Map<Thread, Object> 结构来存储线程共享变量,但是 Thread 数量一般来说比 ThreadLocal 数量多,这样的性能并不好。

*关于内存泄露这块感觉理解还不是很深,主要是没有结合实际生产案例。

原文:https://www.cnblogs.com/cpcpp/p/15212445.html

评论(0)
© 2014 bubuko.com 版权所有 - 联系我们:wmxa8@hotmail.com
打开技术之扣,分享程序人生!