易失性变量可以在java中定义为静态吗?

2022-09-01 12:20:59

我可以声明这样的事情吗?

static volatile boolean first=false;

答案 1

为了扩展迈克尔的评论。

static简单地表示不与包含类的实例相关联。

volatile只是意味着该值可能被其他线程更改而不会发出警告。

因此,您的问题可以归结为“与包含类的实例无关的字段是否可以在没有警告的情况下由另一个线程更改?

正如迈克尔所指出的,这个问题的答案是肯定的。实例关联与并发修改正交。


答案 2

是的,可以。

Java 中的变量对于每个类存储一次(而不是每个对象存储一次,例如非静态变量)。这意味着所有对象(和静态方法)共享同一个变量。static

将变量声明为(无论是否)表示该变量将由多个线程频繁访问。在Java中,这归结为指示线程它们不能缓存变量的值,但必须在突变后立即写回,以便其他线程看到更改。(默认情况下,Java 中的线程可以自由缓存变量)。volatilestatic


推荐