java内存模型的原子性、可见性、有序性与指令重排序
2024-09-05 07:30:17
在并发编程中,我们通常会遇到以下三个概念:原子性、可见性和有序性。我们先看具体看一下这三个概念:
1.原子性
操作时不可分割的
比如a=0,此操作不可分割,而++a,实际上是a=a+1,为两个操作。想将非原子操作编程原子操作,得用synchronized、lock等修饰
volatile修饰的变量不具备原子性。
2.可见性
即当多个线程访问同一个变量时,一个线程修改了这个变量的值,其他线程能够立即看得到修改的值。
比如用volatile修饰的变量,线程A修改后立即写入主存,线程B中的变量的缓存行失效,只能从主存中获取。
3.有序性
即程序执行的顺序按照代码的先后顺序执行。
指令重排序(Instruction reorder)
处理器为了提高程序运行效率,可能会对输入代码进行优化,它不保证程序中各个语句的执行先后顺序同代码中的顺序一致,但是它会保证程序最终执行结果和代码顺序执行的结果是一致的。
处理器在进行重排序时是会考虑指令之间的数据依赖性,如果一个指令Instruction 2必须用到Instruction 1的结果,那么处理器会保证Instruction 1会在Instruction 2之前执行。
最新文章
- PHP的日期和时间处理函数
- 第一次打开Lightroom时的基本设置
- Des加解密算法
- 张艾迪(创始人):创始人故事无限N个
- SQLServer BCP 命令的使用
- 前端资源多个产品整站一键打包&;包版本管理(二)——如何在bower的配置文件加上注释
- Mysql zip压缩包安装
- LABJS源码浅析
- STAR法则
- HashMap 你真的了解吗?
- SpringBoot jar 注册windows服务
- live 2d js demo
- MyBatis基础入门《八》查询参数传入Map
- Python+Selenium学习--alert/confirm/prompt 处理
- 在Mac上配置全局的Git忽略文件
- 编码自动识别工具 uchardet
- better-scroll的用法,及其中的一个属性event._constructed详解
- Linux: su sudo sudoer
- java中的继承(is a )和组合(has a)
- hihocoder 1145 : 幻想乡的日常
热门文章
- 性能分析之TCP全连接队列占满问题分析及优化过程(转载)
- node.js http模块和fs模块上机实验·
- Educational Codeforces Round 50 (Rated for Div. 2) F - Relatively Prime Powers(数学+容斥)
- springboot整合mybatis-plus逆向工程
- 题解 [CF332C] Students' Revenge
- Financial Management(SDUT 1007)
- python 获取数字在内存的内容
- python控制窗口移动(轨迹为圆)
- 无线AP知识点
- FTP基础