- ThreadLocal 内部其实是用 Map 集合来保存数据.其中键为当前线程.
- ThreadLocal 类只有三个方法:
void set(T value)
: 保存值;T get()
: 获取值;void remove()
: 移除值;
// 模拟实现 ThreadLocal
class MyThreadLocal<T> {
private Map<Thread, T> map = new HashMap<Thread, T>();
public void set(T data){
// 使用当前线程做键
map.put(Thread.currentThread(),data);
}
public T get(){
return map.get(Thread.currentThread());
}
public void remove(){
map.remove(Thread.currentThread());
}
}
// 示例:
public void fun(){
final ThreadLocal<String> tl = new ThreadLocal<String>();
tl.set("hello");
// 匿名内部类来取值
new Thread(){
public void run(){
System.out.println("内部类:" + tl.get()); // 输出结果为 null, 因为线程不同
}
}.start();
}
参考资料: