ThreadLocal,这个东西真的是熟悉又陌生,原因是面试的时候好像经常会被问到,但是实际使用的时候却用的比较少。
对于其源码,很多博客到处都是,就不在贴在这里,免去抄来抄去的嫌疑。
在并发编程的环境下,如果存在共享数据,为了保证这些数据的一致性,我们需要通过各种操作来保证共享数据的一致性,如通过加锁的方式,无论是那种方式都好,其目的都是为了对共享数据操作的原子性。
而ThreadLocal取反其道行之,对于一个共享变量,每个使用它的线程,都为其分配一个副本,即保证了每个线程用到的这个共享变量都是不一样的,即t1线程不会用到t2线程修改后的共享变量的值。
还是贴一点源码
public T get() {
// 当前线程
Thread t = Thread.currentThread();
ThreadLocalMap map = getMap(t);
if (map != null) {
ThreadLocalMap.Entry e = map.getEntry(this);
if (e != null) {
@SuppressWarnings("unchecked")
T result = (T)e.value;
return result;
}
}
return setInitialValue();
}
网友评论