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

标签 java multithreading concurrency thread-local

我们可以像获取 ThreadLocal 那样获取对 Thread 成员变量的引用吗?

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

最佳答案

if i have a Member variable inside a Runnable, can i get back a reference to it?

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

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

<小时/>

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

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

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

关于java - Java 线程中的 ThreadLocal 与成员变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42289546/

相关文章:

iphone - 过早退出 dispatch_async ,Grand Central Dispatch

objective-c - 使用 NSOperationQueues 的核心数据和并发

java - 试图了解 ConcurrentHashMap 的范围

java - 未报告的异常 java.io.FileNotFoundException;必须被捕获或宣布被抛出

java - 将文件转换为字节数组时出错。 java.ioFileNotFoundException

windows-phone-7 - WP7 无效的跨线程访问 - ScheduledTaskAgent

scala - 同时处理具有重复项的序列

java - Java 语法中用于区分 >>(右移运算符)与嵌套泛型 List<List<String>> 的技巧

java - 在 Java 中克隆对象 [3 个问题]

java - 在 Spring 4 中运行并行线程的优雅方式