gpt4 book ai didi

java - ThreadLocal 类的目的和用途?

转载 作者:行者123 更新时间:2023-12-03 19:04:43 28 4
gpt4 key购买 nike

我正在浏览 ThreadLocal类文档,想知道它可以在什么场景下使用。

首先我认为它可以用于那些我们有第三方/遗留类并且我们想要处理同步问题的场景。然后我查看了 ThreadLocal 的其他示例,发现 ThreadLocal 在那里无济于事,因为在大多数情况下,我们只有在所有线程之间共享的单个对象。这是正确的吗?

随着进一步的理解,现在我可以想到在那些我们需要为每个线程单独的对象的场景中使用 ThreadLocal 类,并且如果特定线程与 ThreadLocal 中的对象交互,则每次都使用同一个对象而不是创建一个新的。

这是正确的还是我遗漏了什么?

最佳答案

ThreadLocal 最常用于在应用程序服务器或 servlet 容器中实现每个请求的全局变量,其中每个用户/客户端请求都由单独的线程处理。

例如,Spring、Spring Security 和 JSF 都有一个“上下文”的概念,通过它可以访问框架的功能。在每种情况下,在不能或不会使用 DI 的情况下,该上下文都是通过依赖注入(inject)(干净的方式)作为 ThreadLocal 实现的。

不利于可维护性,因为它隐藏了依赖关系,也直接导致问题,因为这样的容器使用了线程池。他们必须使用反射来删除请求之间的所有 ThreadLocal 实例,以避免来自一个请求的数据出现在另一个请求中(可能导致严重的安全问题)。有时它还会导致内存泄漏。

基本上,它是一个非常有用的功能,但也非常危险。我建议您尽可能避免使用它。

关于java - ThreadLocal 类的目的和用途?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7625922/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com