java - 显示 ThreadLocal 使用要求的示例

标签 java multithreading thread-safety thread-local

据我所知,在 Java 中,ThreadLocal 类使我们能够创建虚拟线程范围。所以一个线程不能访问另一个的变量或其他东西。

能否请您提供一些编码人员需要使用 ThreadLocal 的代码,使用 ThreadLocal 后一切正常。

谢谢。

最佳答案

使用 ThreadLocal 是一种使每个线程都可以使用信息的便捷方法,通常用于每个请求一个线程模型的 Web 应用程序中。需要为每个请求单独跟踪的请求上下文数据可以使用 ThreadLocal 提供。

ThreadLocal 常用于Spring Framework ,根据所使用的组件,您可以在其中使用 ThreadLocal 表示各种类型的上下文。

有关真实世界的示例,请参阅:

每个示例的意图和实现都是相似的。例如您想要存储当前请求的 Locale 信息,然后在其他地方可用。 set 方法(例如 setLocaleContext 将信息存储在 ThreadLocal 上)和 get 方法(例如 getLocaleContext 将从当前线程返回 Locale 信息请求)

最后,我想补充一点,滥用 ThreadLocal 不是一个好主意,不应将其视为良好设计的替代品。因此,如果可以通过传递具有适当字段值的对象来共享相关的上下文信息,那么这应该优于 ThreadLocal,后者使信息可以普遍访问。 This article可能会更有用。

关于java - 显示 ThreadLocal 使用要求的示例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31804498/

相关文章:

java - 检查 if 语句中的对象引用以及其他对象的方法是否为 null

java - Java RMI 回调表异常中没有此类对象

c++ - 使用 std::atomic<bool>::atomic 时出现错误 C2248

c# - 关闭时是否需要使用互锁?

java - 使用 Java 从 XML 文件中提取值

java - 如何使用spring boot admin 2版本和spring boot 1.5版本?

android - 如果用户使用后退按钮,如何处理来自后台线程的反馈?

java - 为什么在syncedList()或Vector已经同步的情况下,为什么我们仍然需要外部同步?

C++ - 方法覆盖未按预期表达

java - 线程在单击按钮时开始,并在单击另一个按钮时结束线程