我看了老师给这位同学的解答,我有一点疑问,线程池中不同线程的线程,按图上说的是每一个 Thread 对应 ThreadLocalMap,然后 ThreadLocalMap 会 set 每一个 Thread 设置的 ThreadLocal 和 value 进去。
但是这里不应该是每个线程的 ThreadLocal 是不受干扰的吗。那不应该是每个线程独享一个 ThreadLocal 对象吗?
难道说这里的 ThreadLocal 里面才会去对应一个个线程,然后每个线程对应 一个 ThreadLocalMap 这样吗
代码如下
public class ThreadLocalNormalUsage02 {
public static void main(String[] args) {
new Service1().process();
}
}
class Service1 {
public void process() {
User user = new User("张三");
UserContextHolder.holder.set(user);
new Service2().process();
}
}
class Service2 {
public void process() {
User user = UserContextHolder.holder.get();
System.out.println("service2:" + user.name);
new Service3().process();
}
}
class Service3 {
public void process() {
User user = UserContextHolder.holder.get();
System.out.println("service2:" + user.name);
UserContextHolder.holder.remove();
}
}
class UserContextHolder {
public static ThreadLocal<User> holder = new ThreadLocal<>();
}
class User {
String name;
public User(String name) {
this.name = name;
}
}