ThreadLocal:定义为成员变量,作为线程局部变量使用,每个线程都拥有独立的ThreadLocal成员 变量。
构造器:
public ThreadLocal()
方法:
public T get() {
Thread t = Thread.currentThread(); // 获取当前线程的引用
ThreadLocalMap map = getMap(t); // 去map中找是否存在
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);
}
实际上get(),set() 都很简单。
如果要给ThreadLocal初始值:
ThreadLocal<String> threadLocal = new ThreadLocal<>(){ // 重写initialValue()即可
protected T initialValue() {
return "初始值";
}
};
顺便说说
volatile:让所有线程共享此变量,但是不具备同步的特征,易发生并发问题。是一个关键字(关键字有源代码吗0.0?)
AtomicInteger:让所有线程共享此变量,对单个方法有原子性。(真心不知道为什么会具有原子性)。