ThreadLocal 例子一看就懂
测试启动了两个线程,此时threadLocal 在两个线程中分别有一个值,互不影响。
threadlocal 里面的数据是当前线程相关的,threadlocal 里面取的数据就是当前线程的数据。
public class threadLocalTest {
private static ThreadLocal<Integer> x=new ThreadLocal<>();
public static void main(String[] args) {
for(int i=0;i<2;i++){
new Thread(new Runnable() {
@Override
public void run() {
Integer data= new Random().nextInt();
System.out.println(Thread.currentThread().getName()+"has put data:"+data);
x.set(data);
new A().get();
new B().get();
}
}).start();
}
}
static class A {
public void get(){
Integer data=x.get();
System.out.println("A from "+Thread.currentThread().getName()+“data:”+data);
}
}
static class B {
public void get(){
Integer data=x.get();
System.out.println("B from "+Thread.currentThread().getName()+"data:"+data);
}
}
}
运行结果:
Thread-0 has put data:1161243174
A from Thread-0 data:1161243174
B from Thread-0 data:1161243174
Thread-1 has put data:1237148231
A from Thread-1 data:1237148231
B from Thread-1 data:1237148231