servlet中的threadlocal变量

use*_*427 6 java concurrency multithreading servlets thread-local

threadlocals变量是否对拥有变量的servlet的所有请求都是全局的?

我在服务器上使用树脂.

感谢awnser.

我想我可以让自己更清楚.

具体案例:

我想要:

  • 请求开始执行时初始化静态变量.
  • 能够以线程安全的方式在从servlet调用的方法的进一步执行中查询变量的值,直到请求结束执行

Joh*_*itb 3

我认为它们对于仅使用该特定线程发出的所有请求都是全局的。其他线程获取线程本地数据的其他副本。这是线程本地存储的关键点: http://en.wikipedia.org/wiki/Thread-local_storage#Java

除非您在 servlet 配置中选中适当的选项,否则 servlet 容器将使用具有多个线程的 servlet 来并行处理请求。因此,实际上,您将为为客户端提供服务的每个线程拥有单独的数据。

如果您的 Web 应用程序不是分布式的(在多个 Java 虚拟机上运行),您可以使用该ServletContext对象来跨请求和线程存储共享数据(然后确保进行适当的锁定)。