千锋教育-做有情怀、有良心、有品质的职业教育机构
ThreadLocal就是一种以**空间换时间**的做法,在每个Thread里面维护了一个以开地址法实现的ThreadLocal.ThreadLocalMap,把数据进行隔离,数据不共享,自然就没有线程安全方面的问题了
4.1实际通过ThreadLocal创建的副本是存储在每个线程自己的threadLocals中的;
4.2.为何threadLocals的类型ThreadLocalMap的键值为ThreadLocal对象,因为每个线程中可有多个threadLocal变量;
4.3.在进行get之前,必须先set,否则会报空指针异常;
因为在上面的代码分析过程中,我们发现如果没有先set的话,即在map中查找不到对应的存储,则会通过调用setInitialValue方法返回i,而在setInitialValue方法中,有一个语句是T value = initialValue(), 而默认情况下,initialValue方法返回的是null。
4.4 如果想在get之前不需要调用set就能正常访问的话,必须重写initialValue()方法。
上一篇
垃圾回收机制(算法原理)相关推荐