ThreadLocal和InheritableThreadLocal的使用
今天在看一个开源项目的时候注意到InheritableThreadLocal类,之前接触的一般都是ThreadLocal类。ThreadLocal这个类大家都比较熟悉。 一句话解释就是这个ThreadLocal存放的是各线程独立的“对象数据”,各线程互不干扰,也不能共享访问,避免并发问题。而InheritableThreadLocal要解决的是要在所有线程中全局共享同一个对象, 所以在当前线程上创建一个新的线程实例Thread时,会把这些线程变量从当前线程传递给新的线程实例(把父线程的数据传递给新线程)。(此时线程变量不再线程安全,需要考虑线程安全问题) ,之前面试的时候问道多线程之间怎样共享数据,方式其实有很多,比如: 1、共享存储系统保存对象(redis缓存、文件形式等) 2、创建共享对象通过值传递给新的线程 3、静态变量的形式 4、多线程共用 Runnable对象 现在看来是用InheritableThreadLocal也是不错的一种方式。 ThreadLocal和InheritableThreadLocal的区别就是: InheritableThreadLocal可以获取父级线程的内容,而ThreadLocal不能。 使用方式及源码参考: public class ThreadLocalContext extends InheritableThreadLocal