Java ThreadLocal静态?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Java ThreadLocal静态?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1521字,纯文字阅读大概需要3分钟。
内容图文
![Java ThreadLocal静态?](/upload/InfoBanner/zyjiaocheng/702/ba1a65c488444153a6b8a5d160119889.jpg)
在线程本地中设置值:
//Class A holds the static ThreadLocal variable.
Class A{
public static ThreadLocal<X> myThreadLocal = new ThreadLocal<X>();
....
}
//A Class B method sets value in A's static ThreadLocal variable
class B{
{
public void someBmethod(){
X x = new X();
A.myThreadLocal.set(x);
}
}
//Class C retrieves the value set in A's Thread Local variable.
Class C {
public void someCMethod(){
X x = A.myThreadLocal.get();
}
...
}
Quesiton:
现在假设这是一个web应用程序,并且线程按顺序执行:B.someBMethod,C.someCMethod.
执行B的someBMethod的多个线程将最终更新SAME A的静态ThreadLocal变量myThreadLocal,从而击败了ThreadLocal变量的目的. (对于ThreadLocal使用静态是根据文档推荐的.)
C的someCMethod,虽然从ThreadLocal中检索值可能无法获得“当前”线程设置的值.
我在这里失踪了什么?
解决方法:
按照ThreadLocal类的定义
This class provides thread-local variables. These variables differ
from their normal counterparts in that each thread that accesses one
(via its get or set method) has its own, independently initialized
copy of the variable. ThreadLocal instances are typically private
static fields in classes that wish to associate state with a thread
(e.g., a user ID or Transaction ID).
这意味着说2个线程t1& t2执行someBMethod()并最终设置x1& x2(X实例).现在,当t1到来并执行someCMethod()时,它得到x1(它自己先前设置),t2得到x2.
换句话说,拥有ThreadLocal的单个静态实例是安全的,因为在调用set时它内部会执行类似这样的操作
set(currentThread, value) //setting value against that particular thread
当你调用get
get(currentThread) //getting value for the thread
内容总结
以上是互联网集市为您收集整理的Java ThreadLocal静态?全部内容,希望文章能够帮你解决Java ThreadLocal静态?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。