当我们写一个单线程程序时,总以为计算机会一行行地运行代码,然而事实并非如此。

什么是重排序?

重排序指的是编译器、处理器在不改变程序执行结果的前提下,重新排列指令的执行顺序,以达到最佳的运行效率。

重排序分类

重排序分为:编译器重排序 和 处理器重排序。

数据依赖

编译器和处理器并不会随意的改变指令的执行顺序,因为有些指令之间是有依赖关系的,若改变了他们的执行顺序,就会出现错误的结果。 
因此,编译器和处理器只会对没有依赖关系的指令进行重排序。

数据依赖:若相邻的两条指令访问同一个变量,并且其中有一条指令执行写操作,那么这样的两条指令之间存在数据依赖。对于有数据依赖关系的指令,不会发生重排序。

数据依赖关系总结一下为以下三种情况:

指令 示例
读后写 a=b;b=1;
写后写 a=1;a=2;
写后读 a=1;b=a;

as-if-serial

在单线程开发中,程序员不需要知道指令是如何重排序的,只要简单地认为指令是按照顺序依次执行的即可。这就是as-if-serial的语义,即:貌似是串行的。

java面试-Java并发编程(二)——重排序相关推荐

  1. 【Java面试】并发编程实战(线程控制操作详解)

     个人简介

  2. Java JUC高并发编程(一)

    目录 一.概述 二.Lock接口 三.线程间的通信 解决虚假唤醒问题 Lock通信示例: 四.线程间定制化通信 一.概述 JUC就是java.util.concurrent工具包的简称,这是一个处理线 ...

  3. 基于《狂神说Java》JUC并发编程--学习笔记

    前言: 本笔记仅做学习与复习使用,不存在刻意抄袭. -------------------------------------------------------------------------- ...

  4. Java多线程与并发编程终极宝典

    阅读本文需要了解的概念 原语 所谓原语,一般是指由若干条指令组成的程序段,用来实现某个特定功能,在执行过程中不可被中断.在操作系统中,某些被进程调用的操作,如队列操作.对信号量的操作.检查启动外设操作 ...

  5. 2021大厂Java面试真题(二)

    2021大厂Java面试真题(二) 2021 [阿里]面试真题: 1.TCP 和 UDP 区别? TCP 基于连接,UDP 基于无连接. TCP 要求系统资源较多,UDP 较少. UDP 程序结构较简 ...

  6. Java中的并发编程

    记录Java并发编程的知识,包括并发编程的详细介绍,并发编程解决的问题,volatile关键字,各种锁机制,synchronized的底层原理,CAS机制,AQS机制,以及JUC里面常见方法 文章目录 ...

  7. JAVA面试常考系列二

    转载自 JAVA面试常考系列二 题目一 解释一下线程和进程 进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位. 线程是进程的一个实体,是CPU调 ...

  8. Java零基础并发编程入门

    Java零基础并发编程入门 并发编程主要包括: 线程,同步,future,锁,fork/join, volatile,信号量,cas(原子性,可见性,顺序一致性),临界性,分布式 了解基础: JMM: ...

  9. Java 多线程与并发编程专题

    Java 线程基础 Java 多线程开发 线程安全与同步 并发控制 非阻塞套接字(NIO) Java 5 中的并发 JDK 7 中的 Fork/Join 模式 相关书评 Java 平台提供了一套广泛而 ...

最新文章

  1. C++ primer 第三章笔记
  2. 20160221.CCPP体系详解(0031天)
  3. dat文件读取_微信dat文件如何查看
  4. 微软发布的python教程_微软发布Python 教程《Develop with Python on Windows》
  5. mysql 查询条件优先级_mysql条件查询and or使用实例及优先级介绍
  6. JDK 15中的确切绝对整数
  7. python3 获取file大小_Go语言 | 你还在这样获取文件的大小吗?
  8. Robust.ai 获得 1500 万美元融资,嘴炮 Gary Marcus 也难逃真香定律
  9. Doc命令之 cd,(跳转到别的盘符)。
  10. 微服务Spring Cloud Eureka 服务端-基本配置(eureka.server.xxx)
  11. ftp服务器修改默认端口,FTP原理和修改FTP默认端口
  12. 《深入浅出SpringCloud》SpringCloud整体架构概览
  13. SAP ABAP BDC基础使用方法
  14. 2021年安全员-C证(陕西省)考试总结及安全员-C证(陕西省)模拟考试系统
  15. 01_03 获取答案
  16. 解决C Runtime R6034的错误
  17. NOIP 2011 Senior 5 - 聪明的质检员
  18. android 电视qq视频,腾讯视频电视版安
  19. c语言 在有n个元素的数组s中查找书名为a的书,问题:单选(2分) 已定义float a[5];,则数组a可引用的元素有( )。...
  20. 动态规划—0-1背包

热门文章

  1. html5图像映射坐标怎么看,如何将AxesImage中的坐标映射到已保存图像文件中的坐标?...
  2. uniapp怎么调起摄像头拍视频_抖音视频怎么拍?我们总结了10个手机视频拍摄小技巧...
  3. NIPS 2016上22篇论文的实现汇集
  4. 最全整理浏览器兼容性问题与解决方案(转)
  5. vue拦截器实现统一token,并兼容IE9验证
  6. JDK+Tomcat搭建JSP运行环境--JSP基础
  7. jQuery笔记总结
  8. Android(java)学习笔记10:同步中的死锁问题以及线程通信问题
  9. 十进制 转换 2-10 进制,int的扩展方法
  10. Python线程指南 ---转自 http://www.cnblogs.com/huxi/archive/2010/06/26/1765808.html