gpt4 book ai didi

java - 什么是 C# "Logical Call Context"的 Java 等效项

转载 作者:IT老高 更新时间:2023-10-28 20:59:03 26 4
gpt4 key购买 nike

在 .net 中,有一个“ super ”线程本地存储 (TLS),它允许任意 TLS 数据自动神奇地从一个线程“跳转”到另一个线程。它基于 CallContext class .

换句话说,一个逻辑请求可以产生一个新线程的层次结构——每个线程都可以访问与原始线程相同的 TLS。这是一个非常强大的功能,特别是对于日志记录、授权、 Multi-Tenancy 或品牌问题。

Java 中的等价物是什么?

仅在 .net 4.5 has the "logical callcontext" gained a "copy on write" capability 中允许线程对逻辑调用上下文进行私有(private)修改。换言之,.net 仍在不断完善此功能并提供更高的稳定性。

如果 Java 有一个等价的概念,它有多稳定?它有什么问题?

澄清

我已经知道 Java 具有线程本地存储 (TLS) 功能。那不是问题。我在问 Java 是否有等效于 .net 的“逻辑调用上下文”,这是一个比简单 TLS 更强大的构造。

最佳答案

也许 InheritableThreadLocal是你要找的吗?

我不确定它是否完全一样,但据我了解它符合这个要求:

a logical request can spawn a hierarchy of new threads - and each of those threads will have access to the same TLS of the original thread.

来自文档

This class extends ThreadLocal to provide inheritance of values from parent thread to child thread: when a child thread is created, the child receives initial values for all inheritable thread-local variables for which the parent has values. Normally the child's values will be identical to the parent's; however, the child's value can be made an arbitrary function of the parent's by overriding the childValue method in this class. Inheritable thread-local variables are used in preference to ordinary thread-local variables when the per-thread-attribute being maintained in the variable (e.g., User ID, Transaction ID) must be automatically transmitted to any child threads that are created.

我不知道您提到的“写入时复制”功能,但我想您可以重写 InheritableThreadLocal.childValue(T) 来代理父值,这样就不会写入通过到父级并修改当前线程的本地存储

关于java - 什么是 C# "Logical Call Context"的 Java 等效项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31035413/

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