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

时间:2017-02-17 04:42:19

标签: java multithreading concurrency thread-local

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

例如,假设我们使用计数器变量来计算ThreadLocal变量中Thread处理的请求数量。考虑一下我们使用ThreadPool Executer来重用线程。现在每个Thread都保持对ThreadLocal计数器变量的引用,并且它可以在每次请求后递增自己的副本。 以类似的方式,如果我在Runnable中有一个Member变量,我可以找回它的引用吗?线程无论如何都被重用了。

1 个答案:

答案 0 :(得分:1)

  

如果我在Runnable中有一个Member变量,我可以找回它的引用吗?

当你说“a Runnable”时,你谈论的是一些实现Runnable接口的对象。 Runnable并没有什么神奇之处,run()方法没有什么神奇之处。

Runnable对象的成员变量就像任何其他对象的成员变量一样,并且您的代码以相同的方式访问它们。

P.S。通常,当你在程序中看到ThreadLocal时,就意味着

  • 该程序曾经是单线程的,
  • 它在static变量中保留了很多状态,
  • 有人添加了多线程作为一种思考,
  • 为每个线程重复一些静态状态是有意义的。

我几乎不会在新程序中使用ThreadLocal,因为我努力不写任何依赖于静态变量的代码,如果你使用ThreadLocal作为非静态数据,你可能会让你的程序变得比它需要的更复杂。