在并发编程中,我们通常会遇到以下三个概念:原子性、可见性和有序性。我们先看具体看一下这三个概念:

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之前执行。

最新文章

  1. PHP的日期和时间处理函数
  2. 第一次打开Lightroom时的基本设置
  3. Des加解密算法
  4. 张艾迪(创始人):创始人故事无限N个
  5. SQLServer BCP 命令的使用
  6. 前端资源多个产品整站一键打包&包版本管理(二)——如何在bower的配置文件加上注释
  7. Mysql zip压缩包安装
  8. LABJS源码浅析
  9. STAR法则
  10. HashMap 你真的了解吗?
  11. SpringBoot jar 注册windows服务
  12. live 2d js demo
  13. MyBatis基础入门《八》查询参数传入Map
  14. Python+Selenium学习--alert/confirm/prompt 处理
  15. 在Mac上配置全局的Git忽略文件
  16. 编码自动识别工具 uchardet
  17. better-scroll的用法,及其中的一个属性event._constructed详解
  18. Linux: su sudo sudoer
  19. java中的继承(is a )和组合(has a)
  20. hihocoder 1145 : 幻想乡的日常

热门文章

  1. 性能分析之TCP全连接队列占满问题分析及优化过程(转载)
  2. node.js http模块和fs模块上机实验·
  3. Educational Codeforces Round 50 (Rated for Div. 2) F - Relatively Prime Powers(数学+容斥)
  4. springboot整合mybatis-plus逆向工程
  5. 题解 [CF332C] Students' Revenge
  6. Financial Management(SDUT 1007)
  7. python 获取数字在内存的内容
  8. python控制窗口移动(轨迹为圆)
  9. 无线AP知识点
  10. FTP基础