一、ThreadLocal原理
1.结构模型
系统里经常用threadlocal保存线程上下文信息,是一个创造线程局部变量的类,适用于线程独享且在类和方法间共享的场景。
ThreadLocal 提供了线程本地的实例。它与普通变量的区别在于,每个使用该变量的线程都会初始化一个完全独立的实例副本。ThreadLocal 变量通常被private static修饰。当一个线程结束时,它所使用的所有 ThreadLocal 相对的实例副本都可被回收。
2.实现原理
在各种及的多线程语言都有,Java用哈希表表实现(ThreadLocalMap)
3.看源码了解主要API
- 1.构造函数ThreadLocal()
- 2.初始化 initialValue()
只有线程在第一次调用get方法时,执行此方法。 public T get()返回ThreadLocal中当前线程副本的值。变量第一次get时没有当前线程的值,就调用initilaVaule()的返回值。
- 3.访问器 get/set
- 4.回收 remove
以下手动来个demo(涉及到延迟加载)
//用泛型构造器赋初始值
public static ThreadLocal<Long> x = new ThreadLocal<>(){
@Override
protected Long initialValue() {
System.out.println("Initial Value run...");
return Thread.currentThread().getId();