Java中的ThreadLocal表示:



我的问题是:当我们需要获取特定于线程的变量时,是否不能仅将变量声明为方法内部的局部变量?因为每个线程都有其自己的堆栈,因此它具有自己的变量副本。我在这里想念什么吗?

最佳答案

ThreadLocal不能替代局部变量。您将ThreadLocal用于必须为static的数据,但不得在线程之间共享。

static final ThreadLocal<MyFoo> myFoo =
    ThreadLocal.withInitial(() -> new MyFoo());

如果您有一个不是ThreadLocalstatic变量,那么您正在做的事情过于复杂,或者正在做的事情完全是错误的。

另一方面,如果您有任何为static的变量(无论是否为ThreadLocal),那么您应该意识到,这是一种设计选择,将会限制您测试和扩展程序的能力。

关于java - 什么时候ThreadLocal优先于Local Variables?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38448292/

10-12 01:17