Java中线程中的ThreadLocal与成员变量

Java中线程中的ThreadLocal与成员变量,java,multithreading,concurrency,thread-local,Java,Multithreading,Concurrency,Thread Local,我们可以像获取ThreadLocal的方式一样返回对线程成员变量的引用吗 例如,假设我们使用一个计数器变量来计数器ThreadLocal变量中线程处理的请求量。考虑到我们正在使用线程池执行器来重用线程。现在,每个线程都保留对ThreadLocal计数器变量的引用,并且它可以在每次请求后增加自己的副本。 以类似的方式,如果我在Runnable中有一个成员变量,我可以得到它的引用吗?线程无论如何都在被重用 如果我在Runnable中有一个成员变量,我可以得到它的引用吗 当您说“a Runnable”

我们可以像获取ThreadLocal的方式一样返回对线程成员变量的引用吗

例如,假设我们使用一个计数器变量来计数器ThreadLocal变量中线程处理的请求量。考虑到我们正在使用线程池执行器来重用线程。现在,每个线程都保留对ThreadLocal计数器变量的引用,并且它可以在每次请求后增加自己的副本。 以类似的方式,如果我在Runnable中有一个成员变量,我可以得到它的引用吗?线程无论如何都在被重用

如果我在Runnable中有一个成员变量,我可以得到它的引用吗

当您说“a Runnable”时,您指的是实现
Runnable
接口的某个对象。
Runnable
没有什么神奇之处,
run()
方法也没有什么神奇之处

Runnable
对象的成员变量与任何其他对象的成员变量一样,代码以相同的方式访问它们


另外,通常,当您在程序中看到
ThreadLocal
时,它意味着

  • 这个程序以前是单线程的
  • 它的很多状态都保存在
    静态变量中
  • 有人在考虑之后添加了多线程,然后
  • 为每个线程复制一些静态状态是有意义的
我几乎不会在新程序中使用
ThreadLocal
,因为我尽量不编写任何依赖于静态变量的代码,如果您对非静态数据使用
ThreadLocal
,则可能会使程序变得比需要的更复杂