ThreadLocal实际上是一个Map结构
Key是Thread名字,value是封装在每个Thread里的变量
很多框架都使用ThreadLocal ,主要用于不被线程共享的变量上面
模拟代码如下
package com.test;
import java.util.HashMap;
import java.util.Map;
import java.util.Random;
public class ThreadScopeSimulate {
private static Map<Thread,Integer> myMap = new HashMap<Thread,Integer>();
public static void main(String[] args) {
// TODO Auto-generated method stub
for(int i = 0;i < 2;i++){
new Thread(new Runnable(){
@Override
public void run() {
// TODO Auto-generated method stub
int data = new Random().nextInt();
System.out.println(Thread.currentThread().getName()
+" data "+data);
myMap.put(Thread.currentThread(), data);
new A().get();
new B().get();
}
}).start();
}
}
static class A{
public int get(){
int data = myMap.get(Thread.currentThread());
System.out.println("A from"+Thread.currentThread().getName()
+" data "+data);
return data;
}
}
static class B{
public int get(){
int data = myMap.get(Thread.currentThread());
System.out.println("B from"+Thread.currentThread().getName()
+" data "+data);
return data;
}
}
}