public class App
{
public static void main(String[] args)
{
ThreadLocal<String> threadLocal = new ThreadLocal<String>();
threadLocal.set("String1");
threadLocal.set("String2");
threadLocal.set("String3");
System.out.println("==============");
System.out.println("++ " + threadLocal.get());
System.out.println("++ " + threadLocal.get());
}
}
the output is
=============
++ String3
++ String3
ソースコードのsetメソッドを参照してください。指定されたThreadに対して、threadlocalmapは1つのマップエントリのみを保持できますか?サンプルが示すように、map.set(this、value);ここでは "this"はvar "threadLocal"なので、 "String3"は前の値を上書きします。 私はこれを間違えていますか?ThreadLocalソースコード混同
public void set(T value) {
Thread t = Thread.currentThread();
ThreadLocalMap map = getMap(t);
if (map != null)
map.set(this, value);// here "this" is the var "threadLocal"
else
createMap(t, value);
}
はい、 'ThreadLocal'は、一度に1つの値を保持することができます。 – shmosel
はまた、あなたの疑問を明確にし、「設定(T値)」メソッドの定義を参照するために「ThreadLocalの」ドキュメントを読むことができます。 https://docs.oracle.com/javase/8/docs/api/java/lang/ThreadLocal.html –