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();
}
public void set(T value) {
Thread t = Thread.currentThread();
ThreadLocalMap map = getMap(t);
if (map != null)
map.set(this, value);
else
createMap(t, value);
}
ThreadLocal的本质是,每个线程只能获取到自己set的数据。 简单测试了一下ThreadLocal类型的成员和普通成员的区别,在多线程环境,每个线程都会存有一个ThreadLocal的值,每个线程访问的get()都是自己调用set时备份的数据,而普通成员则被线程共享。
ThreadLocal是解决线程安全问题一个很好的思路,它通过为每个线程提供一个独立的变量副本解决了变量并发访问的冲突问题。
------------
我还是没明白用Threadlocal有啥好处啊.我完全可以给每个线程实例传递一个新的变量啊。这样不就可以不用threadlocal了么?
它是每个线程一个副本,互不影响。那跟我刚才的做法有区别吗?
threadlocal 貌似跟同步无关了哦。不存在资源争用了,还同步啥呢????