java笔记java中的volatile关键字

Posted 棉花糖灬

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java笔记java中的volatile关键字相关的知识,希望对你有一定的参考价值。

本文参考了博客园作者“ Matrix海子 ”的文章Java并发编程:volatile关键字解析

volatile关键字可以用来修饰变量,当变量被volatile修饰之后,就保证了变量具有可见性,并且禁止进行指令重排序。

可见性即当一个线程修改了某个变量的值后,该新值对其他所有线程都是立即可见的。而指令重排序是指为了优化代码执行效率,对指令的顺序进行重排序,但会保证重排序后指令执行的结果和原来的一样。

但是volatile关键字不能保证操作的原子性,原子性即在操作执行过程中不允许被打断 。例如定义了public volatile int i = 0;,在多线程对变量i做自增操作i++时,并不能保证该操作是原子性的,因为自增操作包括了取出变量当前的值,变量值加一,将变量值写回内存三步。

volatile关键字可以在一定程度上保证有序性,有序性即程序执行的顺序按照代码的先后顺序执行。对于volatile关键字修饰的变量而言,如果根据操作该变量的语句把代码分成两部分,则这两部分代码内部都不能保证有序性(即可能会发生指令重排序),而两个代码块之间是有序的。换句话说:不能把volatile变量前面的语句放到其后面执行 ,也不能把volatile变量后面的语句放到其前面执行。

以上是关于java笔记java中的volatile关键字的主要内容,如果未能解决你的问题,请参考以下文章

Java:java学习笔记之volatile关键字的简单理解和使用

volatile 学习笔记

java中的volatile关键字错误[重复]

面试:说说Java中的 volatile 关键词?

Java中最简单易懂的volatile关键字示例

Java中的volatile关键字