首页 > 基础资料 博客日记
对java原子性,原子操作的理解
2023-07-30 17:28:09基础资料围观239次
本篇文章分享对java原子性,原子操作的理解,对你有帮助的话记得收藏一下,看Java资料网收获更多编程知识
原子性:即一个操作或者多个操作,要么全部执行,并且执行的过程不会被任何因素打断,要么就都不执行。(注意单核与多核,CPU时间片耗尽,打断与影响)
在单CPU的情况下,只要一组操作能在一个时间片内被完成,这组操作就是原子性的,如果完不成,可能在这个空档期会有别的线程操作这组操作中的变量,破坏原子性。
在多CPU的情况下,无论一组操作否能在一个时间片内被完成,都有可能会有别的线程操作这组操作中的变量,破坏原子性。
原子操作:满足原子性的操作,在Java中,对基本数据类型的变量的读取和赋值操作是原子性操作,即这些操作是不可被中断的,要么执行,要么不执行。
example:
x = 10; //语句1
y = x; //语句2
x++; //语句3
x = x + 1; //语句4
只有语句1是原子性操作,也就是说,只有单步的读取、赋值(而且必须是将数字赋值给某个变量,变量之间的相互赋值不是原子操作)才是原子操作。
原子操作问题 : 线程中 , 对变量副本 count 进行自增操作 , 不是原子操作 , 首先 从工作内存中读取变量副本到执行引擎 ( 操作数栈 ) 中
, 然后 再 进行自增运算 , 最后 写回到线程工作内存中 , 这是3个操作 , 如果变量 在这3个操作的空档时间进行了修改 , 那么就会产生无法预知的效果 ;
文章来源:https://www.cnblogs.com/sjj123/p/16512284.html
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:jacktools123@163.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:jacktools123@163.com进行投诉反馈,一经查实,立即删除!
标签: