Mik*_*uel 65

扩展Michael的评论.

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

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

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

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


Håv*_*d S 21

是的你可以.

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

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

  • 确实存在差异,它从答案中推断出:每个类都存储一次`static`变量.一个`static volatile`变量每个类存储一次_and_将被多个线程频繁访问,即读取不能被缓存. (4认同)

Mic*_*rdt 7

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