问题标签 [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 投票
6 回答
66291 浏览

python - 什么是 Python 中的“线程本地存储”,为什么需要它?

特别是在 Python 中,变量如何在线程之间共享?

尽管我以前使用threading.Thread过,但我从未真正理解或看到变量如何共享的示例。它们是在主线程和子线程之间共享还是仅在子线程之间共享?我什么时候需要使用线程本地存储来避免这种共享?

我已经看到很多关于使用锁在线程之间同步访问共享数据的警告,但我还没有看到一个非常好的问题示例。

提前致谢!

0 投票
3 回答
5059 浏览

.net - 在 .NET 中使用线程本地存储的最佳实践是什么?

我的应用程序中有一个要求,我认为可以通过使用线程本地存储来满足,但我想知道这是否是最好避免的事情之一。

我已经阅读了一些关于这个主题的文章:

http://www.dotnetcoders.com/web/Articles/ShowArticle.aspx?article=58

http://msdn.microsoft.com/en-us/library/system.threadstaticattribute(vs.80).aspx

我知道如何使用它,我只是想知道我是否应该使用它。

有什么建议,需要注意的地方吗?

[编辑]

这是用例:

我通过一些方法汇集所有数据访问,这些方法对每个查询进行大量记录。我记录的一件事是命令文本的完整转储,其中填充了命令,以便我可以简单地从跟踪日志中直接复制粘贴到 Sql Management Studio 中。

在我的网络应用程序的 global.asax 中,当我遇到未处理的异常时,我会向管理员发送尽可能多的信息的电子邮件。当我收到 SqlException 时,我想将该 sql 命令转储文本放入这封电子邮件中,这将节省我在页面因查询而崩溃时挖掘跟踪日志的时间。

我不想更改我的数据访问类的方法签名,这样我就可以一直向下传递一些引用,只是为了在遇到异常时将其取出。我在想也许 TLS 是放置“lastsqlcommand”之类的好地方,但这看起来不是一个可行的解决方案。

0 投票
5 回答
14139 浏览

java - servlet 中的线程局部变量

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

我正在为服务器使用树脂。

谢谢你的遮阳篷。

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

具体案例:

我想要:

  • 当请求开始执行时初始化一个静态变量。
  • 能够以线程安全的方式在从 servlet 调用的方法的进一步执行中查询变量的值,直到请求结束执行
0 投票
2 回答
2699 浏览

c# - 线程本地存储是否在后台工作程序调用之间持续存在?

后台工作线程是否被重用?

具体来说,如果我在后台工作程序的 DoWork() 方法期间设置了一个命名数据槽(线程本地存储),那么该数据槽的值是否会持续存在,以后可能会在其他线程中找到?

没想到,居然有这个BUG。。。

编辑:这篇博文建议BackGroundWorker使用ThreadPool,这意味着线程重用。所以问题变成了;重复使用的线程是否可能在调用之间保持线程本地存储?

0 投票
6 回答
31188 浏览

java - ThreadLocal 变量的性能

ThreadLocal变量中读取的速度比从常规字段中读取的速度慢多少?

更具体地说,简单的对象创建比访问ThreadLocal变量更快还是更慢?

我认为它足够快,因此拥有实例比每次ThreadLocal<MessageDigest>创建实例都要快得多。MessageDigest但这也适用于 byte[10] 或 byte[1000] 吗?

编辑:问题是调用ThreadLocalget 时到底发生了什么?如果这只是一个领域,就像任何其他领域一样,那么答案将是“它总是最快的”,对吧?

0 投票
4 回答
9771 浏览

java - Spring中的线程

我有一个使用 spring、hibernate 和 struts 的 Web 应用程序(它在 Tomcat 上运行)

调用顺序是这样的......

Struts 动作调用 spring 服务 bean,后者又调用 Spring DAO bean。DAO 实现是一个 Hibernate 实现。

问题是 我所有的 spring bean 会在同一个线程中运行吗?我可以在 ThreadLocal 中存储一些东西并在另一个 bean 中获取它吗?

我很确定这在无状态会话 Bean 中不起作用。EJB 容器可以(或将)为会话 bean 的每次调用生成一个新线程

弹簧容器会做同样的事情吗?即在同一个线程中运行所有bean?

当我尝试 JUnit 测试时——我通过测试用例中的 Thread.currentThread().getId() 和两个 bean 获得了相同的 id——这让我相信只有一个线程在运行

还是行为不可预测?或者在Tomcat服务器上运行时会改变吗?

澄清 我不希望在两个线程之间交换数据。我想将数据放入 ThreadLocal 并能够从调用堆栈中的所有 bean 中检索它。这只有在所有 bean 都在同一个线程中时才有效

0 投票
1 回答
712 浏览

perl - 为什么 shl_load() 对于具有线程本地存储的库会失败?

Perl 中的线程默认使用自己的本地存储来存储所有变量,以尽量减少线程对现有非线程感知代码的影响。在 Perl 中,可以使用属性创建线程共享变量:

HP-UX 运行时加载程序不支持动态加载包含 (TLS) 线程本地存储的共享库。
因此,当尝试导入包含 TLS 的模块时,会报告以下错误:

所以我知道为什么我会收到一个错误我只是不清楚为什么很难用 TLS 加载一个库?

0 投票
26 回答
353318 浏览

java - 我应该何时以及如何使用 ThreadLocal 变量?

什么时候应该使用ThreadLocal变量?

它是如何使用的?

0 投票
3 回答
1112 浏览

java - 线程本地;每次都创建一个变量的副本不一样吗?

我仍然对 ThreadLocal 的概念感到困惑。我已经阅读了 JavaDoc,以及此处发布的其他相关问题,但是所使用的行话并没有对我有太大帮助。

我有点理解 ThreadLocal,也就是说,每个线程都有自己的变量副本。那么……这与说……每次都构造新变量有何不同?

例如,以 DateFormatter 为例:

如果第二个所做的只是返回变量的新副本,那么第一个与第二个有何不同?

谢谢。

0 投票
8 回答
10700 浏览

java - ThreadLocal 资源泄漏和弱引用

我对ThreadLocal的有限理解是它存在资源泄漏问题。我收集到这个问题可以通过正确使用带有 ThreadLocal 的WeakReferences来解决(尽管我可能误解了这一点。)我只是想要一个正确使用带有 WeakReference 的 ThreadLocal 的模式或示例(如果存在)。例如,在这段代码片段中,WeakReference 会在哪里引入?