可以在java中将volatile变量定义为static吗?

我可以声明这样的事吗?

static volatile boolean first=false; 

扩展Michael的评论。

static只表示与包含类的实例无关。

volatile只是意味着其他线程可以在没有警告的情况下更改该值。

所以你的问题归结为“可以在没有警告的情况下由另一个线程更改与包含类的实例无关的字段吗?”

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

是的你可以。

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

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

当然。 两种改性剂的效果完全正交。