问题标签 [thread-local]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
2770 浏览

java - Servlet 中的 SimpleDateFormat

我在我的 Servlet 中使用了很多 SimpleDateFormat 对象。不幸的是,SimpleDateFormat 不是线程安全的。因此,我考虑用 ThreadLocal 包装它以促进 SimpleDateFormat 对象的重用。我写了一个 util-class 来启用它:

实际上,这似乎会导致内存泄漏。关闭我的 webapp 时,Tomcat 会记录以下错误消息:

严重:Web 应用程序 [] 创建了一个 ThreadLocal,其键类型为 [null](值 [com.example.util.DateUtil$2@50242f7d]),值类型为 [java.text.SimpleDateFormat](值 [java.text .SimpleDateFormat@d91b489b]) 但在 Web 应用程序停止时未能将其删除。这很可能造成内存泄漏。

我了解内存泄漏的原因,但是在 Servlet 中处理 SimpleDateFormat 对象(或任何其他非线程安全对象)的最佳方法是什么?

0 投票
5 回答
4415 浏览

java - 使用 ThreadLocal 作为数据的上下文是个好主意吗?

使用 ThreadLocal 作为 Web 应用程序中数据的上下文是个好主意吗?

0 投票
5 回答
3714 浏览

java - ThreadLocal 是否在 TLAB 中分配?

我想,ThreadLocal 变量是在 Thread Local allocation Buffer(s) 或 TLAB 中分配的,对吗?

我没有成功找到任何说明是什么使某些类存储在 TLAB 中的文档。如果您知道一些,请发布链接。

0 投票
2 回答
2262 浏览

java - ThreadLocals 和并行类加载的影响

假设

如果 A 仅在 vm 上的一个类加载器中加载,则 t1 的值是显而易见的。但是如果 A 在两个不同的类加载器中并排加载,t1 会发生什么?是否会为给定线程共享该值?

0 投票
6 回答
6839 浏览

java - Servlet 3 规范和 ThreadLocal

据我所知,Servlet 3 规范引入了异步处理特性。除此之外,这意味着同一个线程可以并且将被重用于处理另一个并发的 HTTP 请求。这不是革命性的,至少对于以前与 NIO 合作过的人来说。

无论如何,这导致了另一个重要的事情:没有ThreadLocal变量作为请求数据的临时存储。因为如果同一线程突然成为不同 HTTP 请求的载体线程,请求本地数据将暴露给另一个请求。

所有这些都是我基于阅读文章的纯粹推测,我没有时间玩任何 Servlet 3 实现(Tomcat 7、GlassFish 3.0.X 等)。

所以,问题:

  • 我是否正确地假设这ThreadLocal将不再是保留请求数据的方便黑客?
  • 有没有人玩过任何 Servlet 3 实现并尝试使用ThreadLocals 来证明上述内容?
  • 除了在 HTTP Session 中存储数据之外,您还有其他类似的易于访问的 hack 建议吗?

编辑:不要误会我的意思。我完全理解危险并ThreadLocal成为黑客。事实上,我总是建议不要在类似的情况下使用它。然而,不管你信不信,线程上下文的使用频率远远超出你的想象。一个很好的例子是 Spring OpenSessionInViewFilter,根据它的 Javadoc:

此过滤器使 Hibernate Sessions 通过当前线程可用,事务管理器将自动检测到该线程。

这并不严格ThreadLocal(尚未检查来源),但听起来已经令人震惊。我可以想到更多类似的场景,而丰富的 Web 框架使这更有可能发生。

简而言之,无论有没有意识,许多人都在这个黑客之上建造了他们的沙堡。因此斯蒂芬的回答是可以理解的,但并不完全是我所追求的。我想确认是否有人真正尝试过并且能够重现失败的行为,因此这个问题可以用作其他被同样问题困住的人的参考点。

0 投票
3 回答
10080 浏览

scala - 我们什么时候应该使用 scala.util.DynamicVariable?

当我阅读 scalatra 的源代码时,我发现有一些代码如下:

有一个有趣的类名为DynamicVariable. 我看过这个类的文档,但我不知道什么时候以及为什么我们应该使用它?它有一个withValue()通常被使用的。

如果我们不使用它,那么我们应该使用什么代码来解决它解决的问题?

(我是scala的新手,如果你能提供一些代码,那就太好了)

0 投票
1 回答
1748 浏览

java - java threadlocal单例 - 它是什么?

通俗地说,当有人说对象是 Java 中的线程本地单例时,这是什么意思?我参加了一个关于 Java Server Faces 的讲座,每次谈到 FacesContext 时——讲师总是提醒我们它是一个线程本地单例。

0 投票
1 回答
718 浏览

grails - 响应写入后如何清理线程局部变量?

我有一个使用 ThreadLocal 的 Grails 应用程序。

目前 ThreadLocal 填充和清除由过滤器处理(之前:填充,之后:清除)。

问题是过滤器的调用是在模板渲染之前运行的,所以我需要的变量过早地都是空值。是否有一些简单的方法可以在响应完全写入后触发 ThreadLocals 的清除?

一种方法是在填充 ThreadLocal 之前清除它,从而将所有工作留给过滤器的before -call。但我不喜欢让 ThreadLocal “携带” vars 的想法,因为它们不再用于任何事情,所以需要其他东西。

0 投票
0 回答
124 浏览

regex - Pex 检测可以导致代码改变其效果吗?

我有一个简单的 JSON 词法分析器类;它需要 astring并生成一个IJSONValue; 有IJSONValue一个ToJSONString返回有效 JSON 字符串的方法。

当然,它的代码非常复杂,有很多分支。这就是为什么我认为这将是测试 Pex 能力的理想场所。我创建了以下测试:

在此运行 Pex,我发现了一些与 null 处理无关的问题,我已经修复了这些问题。但是,我也有很多方法报告没有意义的异常。它们看起来像这样:

然而,这与我知道有效的测试之一非常相似。我在调试器中和调试器外部运行它,在这两种情况下测试都通过了。最令人难以置信的是,异常文本实际上是有道理的;Constant如果正则表达式与字符串不匹配,则会报告该文本"false"。对于其他正则表达式不匹配,我得到了类似的例外,这是没有意义的。

为什么 Pex 认为这会引发异常?仪器是否混乱ThreadLocalRegex以一种奇怪的方式?这就是我的正则表达式持有类的样子(为简洁起见,对正则表达式进行了编辑)。

0 投票
8 回答
10871 浏览

java - ThreadLocal 在 servlet 中存储 ServletRequest 和 Response:有什么用?

一旦我遇到了一种模式,将 whereServletRequest和 response 对象放入 servlet 的局部ThreadLocal变量。servlet 类也有获取当前请求和响应对象的方法。所以为了得到这些对象,你仍然需要使用 servlet 对象进行操作。

拥有这些ThrealLocal局部变量有什么意义?