static和volatile关键字的区别

1.关键字含义的区别

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

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

2.关键字特性的区别

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

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

3.内存可见性的区别

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

版权声明:本文采用知识共享 署名4.0国际许可协议 [BY-NC-SA] 进行授权
文章名称:《static和volatile关键字的区别》
文章链接:https://zhuji.vsping.com/4023.html
本站资源仅供个人学习交流,请于下载后24小时内删除,不允许用于商业用途,否则法律问题自行承担。