Java教程

对java原子性,原子操作的理解

本文主要是介绍对java原子性,原子操作的理解,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

原子性:即一个操作或者多个操作,要么全部执行,并且执行的过程不会被任何因素打断,要么就都不执行。(注意单核与多核,CPU时间片耗尽,打断与影响)
在单CPU的情况下,只要一组操作能在一个时间片内被完成,这组操作就是原子性的,如果完不成,可能在这个空档期会有别的线程操作这组操作中的变量,破坏原子性。
在多CPU的情况下,无论一组操作否能在一个时间片内被完成,都有可能会有别的线程操作这组操作中的变量,破坏原子性。
原子操作:满足原子性的操作,在Java中,对基本数据类型的变量的读取和赋值操作是原子性操作,即这些操作是不可被中断的,要么执行,要么不执行。
example:

x = 10; 	//语句1
y = x; 		//语句2
x++; 		//语句3
x = x + 1; 	//语句4

只有语句1是原子性操作,也就是说,只有单步的读取、赋值(而且必须是将数字赋值给某个变量,变量之间的相互赋值不是原子操作)才是原子操作。

原子操作问题 : 线程中 , 对变量副本 count 进行自增操作 , 不是原子操作 , 首先 从工作内存中读取变量副本到执行引擎 ( 操作数栈 ) 中
, 然后 再 进行自增运算 , 最后 写回到线程工作内存中 , 这是3个操作 , 如果变量 在这3个操作的空档时间进行了修改 , 那么就会产生无法预知的效果 ;

这篇关于对java原子性,原子操作的理解的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!