static和volatile关键字的区别

1.关键字含义的区别

static关键字声明这个字段是静态的,可能被多个实例共享;在主存区上该类的所有实例的该字段为同一个变量,即唯一性。

volatile关键字声明这个字段易变,可能被多个线程使用;Java内存模型负责各个线程的工作区与主存区的该字段的值保持同步,即一致性。

2.关键字特性的区别

static关键字是一种静态修饰符,可以修饰成员变量和成员方法。static修饰成员变量表示该成员变量只在内存中只存储一份,可以被共享访问、修改;而static修饰的成员方法称为静态成员方法,又称类方法,它也不是某个对象所特有的。

volatile关键字是一种类型修饰符,用它声明的类型变量表示可以被某些编译器未知的因素更改,比如:操作系统、硬件或者其它线程等。遇到这个关键字声明的变量,编译器对访问该变量的代码就不再进行优化,从而可以提供对特殊地址的稳定访问。

3.内存可见性的区别

static只是声明变量在主存上的唯一性,不能保证工作区与主存区变量值的一致性,即未必能取到主存中最新的值,无法保证内存可见性。而volatile保证了每次工作内存操作前,都取主存中取最新的值,解决了内存不可见性的问题,这是static没法做到的。

未经允许不得转载:国外主机测评 - 国外VPS,国外服务器,国外云服务器,测评及优惠码 » static和volatile关键字的区别