一、ThreadLocal作用是什么?
ThreadLocal是针对共享变量而言的,如果多个线程都可能使用到这个某个变量,而这个变量又希望是线程自己管理,变动无需其它线程知道,即变动结果对自己产生作用即可,就可以将变量指定为ThreadLocal。
说白了:ThreadLocal即各个线程从主内存区域将变量分别克隆了一份,然后各自使用互不干扰。
二、代码案例展示
package test.thread.threadlocal;
public class ThreadLocalTest {
ThreadLocal<Long> longLocal = new ThreadLocal<Long>();
ThreadLocal<String> stringLocal = new ThreadLocal<String>();
public void set() {
longLocal.set(Thread.currentThread().getId());
stringLocal.set(Thread.currentThread().getName());
}
public long getLong() {
return longLocal.get();
}
public String getString() {
return stringLocal.get();
}
public static void main(String[] args) throws InterruptedException {
final ThreadLocalTest test = new ThreadLocalTest();
test.set();
System.out.println(test.getLong());
System.out.println(test.getString());
Thread thread1 = new Thread(){
public void run() {
test.set();
System.out.println(test.getLong());
System.out.println(test.getString());
};
};
thread1.start();
thread1.join();
System.out.println(test.getLong());
System.out.println(test.getString());
}
}
打印结果:
1
main
10
Thread-0
1
main
从代码执行结果来看,thread1对longLocal 和 stringLocal的改动,丝毫不影响主线程的值。