编程语言
首页 > 编程语言> > 【java笔记】java中的volatile关键字

【java笔记】java中的volatile关键字

作者:互联网

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

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

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

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

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

标签:java,变量,关键字,指令,volatile,有序性,排序
来源: https://blog.csdn.net/zuzhiang/article/details/118464981