在“线程本地”中设置值:
//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();
}
...
}
问 :
现在假设这是一个Web应用程序,并且线程按以下顺序执行:B.someBMethod,C.someCMethod。
执行B的someBMethod的多个线程最终将更新 SAME
A的静态ThreadLocal变量myThreadLocal,从而超出了ThreadLocal变量的目的。(根据文档建议在ThreadLocal中使用static。)
C的someCMethod从ThreadLocal检索值时,可能无法获取“当前”线程设置的值。
我在这里想念什么?
按照ThreadLocal类的定义
此类提供线程局部变量。这些变量与普通变量不同,因为每个访问一个线程(通过其get或set方法)的线程 都有其自己的,独立初始化的变量副本。
ThreadLocal实例通常是希望将状态与线程关联的类中的私有静态字段(例如,用户ID或事务ID)。
这意味着说2个线程t1
&t2
执行someBMethod()
,它们分别结束设置x1
&x2
(的实例X
)。现在,当t1
come并执行时,someCMethod()
它会获取x1
(它是由
它自己* 设置 的)和gets 。 *t2``x2
换句话说,只有一个静态实例是安全的ThreadLocal
,因为在内部调用时它会执行类似的操作set
set(currentThread, value) //setting value against that particular thread
当您调用get
get(currentThread) //getting value for the thread
问题内容: 直到几周前,我还以为我知道何时创建字段和方法或。例如,当一个字段(例如另一个类的对象)对于该类的任意数量的对象是唯一的时,应将其设置为。 但是几周后,我读到了有关JVM垃圾收集的信息。 我知道字段永远不会被垃圾收集,并且始终保持在内存中,除非类加载器本身是垃圾收集的。 但是,如果我不创建该字段,至少它将被垃圾回收。 因此,在使字段/方法静态化与否之间似乎有一条 很细的界限 。 有人可以
本文向大家介绍JavaThreadLocal Java 8功能初始化,包括了JavaThreadLocal Java 8功能初始化的使用技巧和注意事项,需要的朋友参考一下 示例
问题内容: 只是为了澄清我正在考虑的这个权利,在Java中,静态字段是整个类使用的变量/字段,还是可以用于引用该类的所有对象?非静态字段是由对象定义的变量吗?并且与对象1引用相同类的第二个对象可以具有与对象1的静态字段不同的值吗? 问题答案: 与实例变量不同,在创建该类的实例之前,可以访问该类中的静态字段或静态类变量。在运行时创建该类的实例时,将创建该类中的实例变量(非静态变量)。因此,直到创建该
我想澄清一下,在java中,静态字段是整个类使用的变量/字段,或者可以被引用该类的所有对象使用?非静态字段是由对象定义的变量?第二个对象引用与对象1相同的类,它可以对对象1的静态字段具有不同的值?
我的程序有问题。Eclipse写道: 我做错了什么?我的应用程序中有2个错误。班你能改进我的代码并解释一下吗?先谢谢你。 多边形 地聚线
我们可以把一个方法赋值给类的函数本身,而不是赋给它的 "prototype"。这样的方法被称为 静态的(static)。 在一个类中,它们以 static 关键字开头,如下所示: class User { static staticMethod() { alert(this === User); } } User.staticMethod(); // true 这实际上跟直接将其
问题内容: 在Linux上的“ C”上, 我需要静态库来静态链接,还是需要足够的共享库?如果没有,为什么不呢?(它们不包含相同的数据吗?) 问题答案: 是的,您需要静态库来构建静态链接的可执行文件。 静态库是编译对象的捆绑包。静态链接到库时,实际上与获取该库的编译结果,将它们解压缩到当前项目中以及将它们当作自己的对象使用一样。 动态库已链接。这意味着一些信息,例如重定位,已经被修复并丢弃。 此外,
ThinkCMF5默认的静态后缀是 html,您可以在后台 url 设置里设置静态后缀