Sas*_*san 1 java multithreading
静态变量为线程保留单个值,但volatile为所有线程保留单个值(例如此处)
大多数场景常量都声明为静态,并且常量数据对于所有线程都是相同的,所以为什么常量不会被声明为volatile
什么时候我们可以在java中使用volatile关键字
我想你误会了两个static和volatile.
static只是在整个类型中有一个字段.它与线程无关 - 它只是关于type(static)的一个字段还是每个类型实例(非static)的一个字段.
volatile只是保证在一个线程所做的更改在其他线程中可见的情况.这与字段是否为静态无关.从JLS第8.3.1.4节开始:
Java编程语言允许线程访问共享变量(第17.1节).通常,为了确保共享变量一致且可靠地更新,线程应确保通过获取锁定来独占使用此类变量,该锁定通常会对这些共享变量实施互斥.
Java编程语言提供了第二种机制,即volatile字段,比某些用途的锁定更方便.
字段可以声明为volatile,在这种情况下,Java Memory Model可以确保所有线程都看到变量的一致值(第17.4节).
(第17.4节有很多更多的细节.)