什么是ThreadLocal变量?[面试6.0]
一个线程内的变量值是共享的,每个线程拥有一个变量的副本(有点和JMM同概念)
当调用set方法时,会为当前线程创建一个static的ThreadLocalMap,这个Map有一个Entry数组,其中Entry的一个元素的key就是当前线程的引用,value就是设置的值
优点:
不需要进行同步锁,提高了性能
每个变量的副本都可以控制保存在自己线程的内部,自然隔离,不会产生多线程访问共享变量的冲突问题
什么是InheritableThreadLocal变量?[面试6.0]
是对ThreadLocal功能的扩展,可以继承值的ThreadLocal,即主线程的InheritableThreadLocal对象的值在子线程中也能根据该对象获取到,而ThreadLocal不行
注意: 在创建子线程前设置的值,子线程才能获取到