gpt4 book ai didi

java - ThreadLocal源代码困惑

转载 作者:行者123 更新时间:2023-12-02 02:39:18 25 4
gpt4 key购买 nike

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只能保存一个map项?如示例所示,map.set(this, value);这里“this”是变量“threadLocal”,因此“String3”将覆盖以前的值。我是不是搞错了?

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是当前线程的本地成员/变量;所以每个线程只得到一个值。

同时,对所设置的值的类型没有限制,在您的示例中,您将其设置为 String,同样,这可以是类集合的实例。

当您希望代码中的所有值都可用时,请将它们放在一个集合(列表)中,或收集您想要的所有值的自定义类型中。

关于java - ThreadLocal源代码困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45747801/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com