Java中的ThreadLocal
表示:
我的问题是:当我们需要获取特定于线程的变量时,是否不能仅将变量声明为方法内部的局部变量?因为每个线程都有其自己的堆栈,因此它具有自己的变量副本。我在这里想念什么吗?
最佳答案
ThreadLocal
不能替代局部变量。您将ThreadLocal
用于必须为static
的数据,但不得在线程之间共享。
static final ThreadLocal<MyFoo> myFoo =
ThreadLocal.withInitial(() -> new MyFoo());
如果您有一个不是
ThreadLocal
的static
变量,那么您正在做的事情过于复杂,或者正在做的事情完全是错误的。另一方面,如果您有任何为
static
的变量(无论是否为ThreadLocal
),那么您应该意识到,这是一种设计选择,将会限制您测试和扩展程序的能力。关于java - 什么时候ThreadLocal优先于Local Variables?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38448292/