Bre*_*ias 33 c# java multithreading
在.net中,有一个"超级"线程本地存储(TLS),它允许任意TLS数据自动地从一个线程"跳转"到另一个线程.它基于CallContext类.
换句话说,逻辑请求可以产生新线程的层次结构 - 并且每个线程都可以访问原始线程的相同TLS.这是一个非常强大的功能,特别是对于日志记录,授权,多租户或品牌问题.
Java中的等价物是什么?
仅在.net 4.5中,"logical callcontext"获得了"写入时复制"功能,允许线程对逻辑callcontext进行私有修改.换句话说,.net仍然在成熟这种能力并提供更大的稳定性.
如果Java有一个等价的概念,它有多稳定?它有什么问题?
澄清
我已经知道Java具有线程本地存储(TLS)功能.这不是问题.我问的是Java是否具有等效的.net"逻辑调用上下文",这是一个比简单的TLS更强大的构造.
xp5*_*500 16
也许InheritableThreadLocal你正在寻找什么?
我不确定它是否完全相同,但据我所知它符合这个要求:
逻辑请求可以生成新线程的层次结构 - 并且每个线程都可以访问原始线程的相同TLS.
来自文档
此类扩展ThreadLocal以提供从父线程到子线程的值的继承:当创建子线程时,子进程接收父对象具有值的所有可继承线程局部变量的初始值.通常,孩子的价值观与父母的价值观相同; 但是,通过覆盖此类中的childValue方法,可以使子级的值成为父级的任意函数.当在变量中维护的每线程属性(例如,用户ID,事务ID)必须自动传输到任何创建的子线程时,可以使用可扩展的线程局部变量优先于普通的线程局部变量.
我不知道您提到的"写入时复制"功能,但我想您可以覆盖InheritableThreadLocal.childValue(T)代理父级的值,以便写入不会传递给父级并修改当前线程的本地存储
| 归档时间: |
|
| 查看次数: |
1079 次 |
| 最近记录: |