ThreadLocal
是⼀个本地线程副本变量⼯具类。内部是⼀个弱引⽤的Map
来维护。这⾥不详细介绍它的原理,⽽是只是介绍它的使⽤,以后有独⽴章节来介绍ThreadLocal
类的原理。
有些朋友称ThreadLocal
为线程本地变量或线程本地存储。严格来说,ThreadLocal
类并不属于多线程间的通信,⽽是让每个线程有⾃⼰”独⽴“的变量,线程之间互不影响。它为每个线程都创建⼀个副本,每个线程可以访问⾃⼰内部的副本变量。
ThreadLocal
类最常⽤的就是set
⽅法和get
⽅法。
package com.company;
public class ThreadLocalDemo {
static class ThreadA implements Runnable{
private final ThreadLocal<String> threadLocal;
public ThreadA(ThreadLocal<String> threadLocal){
this.threadLocal=threadLocal;
}
@Override
public void run() {
threadLocal.set("A");
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("ThreadA输出:" + threadLocal.get());
}
}
static class ThreadB implements Runnable{
private final ThreadLocal<String> threadLocal;
public ThreadB(ThreadLocal<String> threadLocal){
this.threadLocal=threadLocal;
}
@Override
public void run() {
threadLocal.set("B");
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("ThreadB输出:" + threadLocal.get());
}
}
public static void main(String[] args){
ThreadLocal<String> threadLocal = new ThreadLocal<>();
new Thread(new ThreadA(threadLocal)).start();
new Thread(new ThreadB(threadLocal)).start();
}
}
感谢分享