一、ThreadLocal
把ThreadLocal看成一个全局Map<Thread, Object>,每个线程获取ThreadLocal变量时,总是使用Thread自身作为key。相当于给每个线程都开辟了一个独立的存储空间,各个线程的ThreadLocal关联的实例互不干扰。
- ThreadLocal表示线程的"局部变量",它确保每个线程的ThreadLocal变量都是各自独立的。
- ThreadLocal适合在一个线程的处理流程中保持上下文(避免了同一参数在所有方法中传递)
- 使用ThreadLocal要用try ... finally结构,并在finally中清除
public class Test {
public static void main(String[] args) {
Share share = new Share();
for (int i = 0; i < 100; i++) {
new Thread(() -> {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
share.setLocal();
share.print();
}, String.valueOf(i)).start();
}
}
}
class Share implements AutoCloseable{
private ThreadLocal<String> local = new ThreadLocal<>();
public void setLocal() {
local.set(Thread.currentThread().getName());
}
public void print() {
System.out.println(local.get());
}
@Override
public void close(){
local.remove();
}
}
网友评论