版权声明:博观而约取,厚积而薄发。 https://blog.csdn.net/BruceLiu_code/article/details/88376021
ThreadLocal概念:线程局部变量。是一种多线程间并发访问某一个变量的解决方案。与Synchronized等加锁的方式有所不同,ThreadLocal完全不提供锁。而是使用以空间换时间的手段,为每个线程提供变量的独立副本,以保障线程的安全。
从性能上来说,ThreadLocal不具有绝对的优势,在并发不是很高的情况下,加锁的性能会更好,但是作为一套与锁完全无关的线程安全解决方案,在高并发或者是竞争激烈的场景,使用ThreadLocal可以在一定的情况下减少锁竞争的问题。
示例1:
/**
* ThreadLocal 线程局部变量
* @author bruceliu
* @create 2019-03-10 11:08
*/
public class ThreadLocalTest {
public static ThreadLocal<String> th = new ThreadLocal<String>();
public void setTh(String value) {
th.set(value);
}
public void getTh() {
System.out.println(Thread.currentThread().getName() + ":" + this.th.get());
}
public static void main(String[] args) throws InterruptedException {
final ThreadLocalTest ct = new ThreadLocalTest();
Thread t1 = new Thread(new Runnable() {
public void run() {
ct.setTh("张三");
ct.getTh();
}
}, "t1");
Thread t2 = new Thread(new Runnable() {
public void run() {
try {
Thread.sleep(1000);
ct.getTh();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}, "t2");
t1.start();
t2.start();
}
}
运行结果:
t1:张三
t2:null