【发布时间】:2026-02-18 17:15:01
【问题描述】:
下面是创建线程局部变量的例子
private static final ThreadLocal<SimpleDateFormat> formatter = new ThreadLocal<SimpleDateFormat>(){
@Override
protected SimpleDateFormat initialValue()
{
return new SimpleDateFormat("yyyyMMdd HHmm");
}
};
还有第二种使用线程本地的方法
public class MyThreadLocal {
public static final ThreadLocal userThreadLocal = new ThreadLocal();
public static void set(Context user) {
userThreadLocal.set(user);
}
public static void unset() {
userThreadLocal.remove();
}
public static Context get() {
return userThreadLocal.get();
}
}
现在,下面一行创建了一个线程局部变量,它是静态的。
public static final ThreadLocal userThreadLocal = new ThreadLocal();
每当在 JVM 中加载类时,都会初始化静态变量。这意味着在加载类时会创建一个对象。
**问题: *当不同的 Thread 调用 ThreadLocal 变量的 Set 或 get 时,threadlocal 对象的副本是如何传递给线程的?*每个 Thread 是如何获取自己的对象的? 如果在加载类时创建了一个对象,那么这是怎么回事?**
【问题讨论】:
-
你看过源代码吗?
-
@DuncanJones 没有邓肯
标签: java thread-local