ThreadLocal源码解析

JDK源码如是说:

ThreadLocal类用来提供线程内部的局部变量。这种变量在多线程环境下访问(通过get或set方法访问)时
能保证各个线程里的变量相对独立于其他线程内的变量。ThreadLocal实例通常来说都是private static 类型的,
用于关联线程和线程的上下文。
 

1、内部存储元素采用ThreadLocalMap,其内部

  1.1、Entry继承WeakReference<ThreadLocal<?>>,

    方便垃圾回收key。每次get()——>getEntry()——>getEntryAfterMiss——>expungeStaleEntry删除key为null的值。

  1.2、使用ThreadLocal作为key,减少Entry的key数量,提高性能。

2、使用时,继承

protected T initialValue() {
return null;
}

添加需要返回的对象。

建议将ThreadLocal变量定义成private static的,这样的话ThreadLocal的生命周期就更长,由于一直存在ThreadLocal的强引用,所以ThreadLocal也就不会被回收,也就能保证任何时候都能根据ThreadLocal的弱引用访问到Entry的value值,然后remove它,防止内存泄露。

ps:ThreadLocal中对象只是当前线程存储在map中的副本。

猜你喜欢

转载自www.cnblogs.com/codegod/p/9059248.html
今日推荐