是否可以从不同的类访问java变量但不能对不同的线程可见?

时间:2017-11-10 11:25:02

标签: java java-threads

据我所知,静态变量在JAVA中的所有线程中都是可见/可访问的。

有没有办法定义一个只能由其线程中的类访问的变量?

2 个答案:

答案 0 :(得分:4)

如果我正确理解你的意图,那么是的,可以通过ThreadLocalhttps://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