【问题标题】:ThreadLocal versus Member Variable in a Thread in JavaJava 线程中的 ThreadLocal 与成员变量
【发布时间】:2017-07-06 11:38:12
【问题描述】:

我们能否像获取 ThreadLocal 一样获取对 Thread 成员变量的引用?

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

【问题讨论】:

    标签: java multithreading concurrency thread-local


    【解决方案1】:

    如果我在 Runnable 中有一个成员变量,我可以取回对它的引用吗?

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

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


    P.S.,通常,当你在程序中看到ThreadLocal,它的意思是

    • 该程序曾经是单线程的,
    • 它在static 变量中保留了很多状态,
    • 有人事后添加了多线程,并且
    • 为每个线程复制一些静态状态是有意义的。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-04-24
      • 1970-01-01
      • 1970-01-01
      • 2019-08-10
      • 1970-01-01
      • 2011-10-04
      • 2016-11-09
      相关资源
      最近更新 更多