据我所知,静态变量在JAVA中的所有线程中都是可见/可访问的。
有没有办法定义一个只能由其线程中的类访问的变量?
答案 0 :(得分:4)
如果我正确理解你的意图,那么是的,可以通过ThreadLocal
:https://docs.oracle.com/javase/8/docs/api/java/lang/ThreadLocal.html
此类提供线程局部变量。这些变量不同 来自他们的正常对应者,每个访问一个的线程 (通过其get或set方法)有自己的,独立初始化 变量的副本。 ThreadLocal实例通常是私有的 希望将状态与线程关联的类中的静态字段 (例如,用户ID或交易ID)。
答案 1 :(得分:0)
您的问题的答案取决于您是指“定义变量”还是“定义值”。
如果您的意思是后者,{@ 1}},正如@Andremoniy所建议的那样,是正确答案。
如果你的意思是前者,不,你不能用静态变量来做。您可以通过在类上定义成员变量并确保这些类的实例只能由特定线程访问来实现。平凡:
ThreadLocal
现在,变量 class MyThread extends Thread {
Object value;
@Override public void run() {
// Do something with value.
}
}
只能由其包含的value
实例访问。如果您与其他线程共享对MyThread
的引用,则只能由MyThread
的其他实例访问它。例如:
MyThread