2019独角兽企业重金招聘Python工程师标准>>>

Jdk版本:jdk1.8.0_151

代码

public class SimpleHappenBefore {public static void main(String[] args) throws InterruptedException {for(int i=0;i<500000;i++){SimpleHappenBefore.State state = new SimpleHappenBefore.State();ThreadA threadA=new ThreadA(state);ThreadB threadB=new ThreadB(state);threadA.start();threadB.start();threadA.join();threadB.join();}}static class ThreadA extends Thread{private final SimpleHappenBefore.State state;ThreadA(SimpleHappenBefore.State state) {this.state = state;}public void run(){state.a=1;state.b=1;state.c=1;state.d=1;}}static class ThreadB extends Thread{private final SimpleHappenBefore.State state;ThreadB(SimpleHappenBefore.State state) {this.state = state;}public void run(){if(state.b==1 && state.a==0){System.out.println("b=1");}if(state.c==1 && (state.b==0 || state.a == 0)){System.out.println("c=1");}if(state.d==1 && (state.a==0 || state.b==0 || state.c==0)){System.out.println("d==1");}}}static class State {public int a = 0;public int b = 0;public int c = 0;public int d = 0;}
}

输出

d==1
d==1
c=1

转载于:https://my.oschina.net/shipley/blog/3046112

java指令重排序代码演示相关推荐

  1. 【Java 并发编程】指令重排序规范 ( happens-before 先行发生原则 )

    文章目录 一.指令重排序规范 二.happens-before 先行发生原则 一.指令重排序规范 指令重排指的是 , 线程中如果两行代码 没有逻辑上的上下关系 , 可以对代码进行 重新排序 ; JVM ...

  2. 【Java 并发编程】线程指令重排序问题 ( 指令重排序规范 | volatile 关键字禁止指令重排序 )

    文章目录 总结 一.指令重排序规范 二.指令重排序示例 总结 Java 并发的 333 特性 : 原子性 : 每个操作都是 不可拆分的原子操作 ; 在线程中进行 a++ 就不是原子操作 , 该操作分为 ...

  3. 说说Java中原子性,可见性与指令重排序的理解

    原子性:就是读数据,处理数据,写数据 这三个步骤不能被终止,或者打断:就是不能被线程调度器中断,切换线程. 这样,才能保证,原子操作在线程切换,并行处理上保证数据地顺序累加处理. 可见性:是Jvm较为 ...

  4. java重排序_Java synchronized 能防止指令重排序吗?

    @ZealTalk 说的是 synchronized 可以防止指令重排,这个观点不对的,也欢迎回答的各位来讨论 synchronized 的有序性 来讨论这个问题先,先看看 Java 里的操作无序现象 ...

  5. Java的多线程机制系列:(四)不得不提的volatile及指令重排序(happen-before)

    一.不得不提的volatile volatile是个很老的关键字,几乎伴随着JDK的诞生而诞生,我们都知道这个关键字,但又不太清楚什么时候会使用它:我们在JDK及开源框架中随处可见这个关键字,但并发专 ...

  6. Java指令屏障_指令重排序和内存屏障

    sap hana计算技术项目实战指南内存 61元 (需用券) 去购买 > 一.指令重排序 指令重排序分为三种,分别为编译器优化重排序.指令级并行重排序.内存系统重排序.如图所示,后面两种为处理器 ...

  7. 由Java引起的指令重排序思考

    背景 问题出现 最近遇到了一个NullPointerException,虽然量不大,但是很怪异,大致长这个样子 这是个什么空指针?居然说我LinkedList.iterator().hasNext() ...

  8. Java并发编程之指令重排序

    在我们面试过程中,通常避免不了会被问到什么是指令重排序?本文就这个问题进行探索. 重排序 前言 一.重排序种类 二.happens-before 三.重排序 1.数据依赖性 2. as-if-seri ...

  9. java volidate线程安全_03.(多线程与并发)面试题-02--Volidate的原理和指令重排序

    线程栈(线程的工作内存)保存了线程运行时候变量值信息.当线程访问某一个对象时候值的时候,首先通过对象的引用找到对应在堆内存的变量的值,然后把堆内存变量的具体值load到线程本地内存中,建立一个变量副本 ...

最新文章

  1. 一分钟先生之拨云见日看绩效
  2. 不忘初心,恪守信条:微盟经历的从删库到跑路的数据灾难
  3. java 工作一年_干java工作了快一年,到底会了什么
  4. 网易云音乐虚化图片html,CSS之高斯模糊—(网易云歌单)
  5. 关于L298N电机驱动模块
  6. 杂评 360和腾讯之争
  7. 十一假期,终于过上了理想的生活节奏
  8. 【黑马Java笔记+踩坑】Maven高级
  9. 大数据开发就业:大数据开发有哪些岗位
  10. 记录常用正则表达式(亲测,有用)
  11. 概述-元数据是什么?
  12. NumPy 快速入门系列:应用统计学基础概念、相关统计指标与NumPy的实现
  13. 【深度好文】香港富豪卧底贫民窟:“你没出息,是因为不努力”害了多少程序员
  14. linux降低磁盘的读,Linux磁盘I/O优化:vm.dirty_ratio - 米扑博客
  15. 【自动化】DCS PLC区别;PLC常见的六大应用
  16. C#如何解析UTF-8编码
  17. 7-17 找最贵的书和最便宜的书
  18. 上海交通大学计算机考研资料汇总
  19. 2023年天猫618淘宝大赢家每日1猜:哪系列是NB夏日潮流必备?今日答案是什么?淘宝天猫618红包口令怎么领取?
  20. 第八周 oj 2399 求倒数和

热门文章

  1. 同步和串行的区别_[深度思考]·为什么CNN是同步(并行)而RNN是异步(串行)的呢?...
  2. c语言把一个数组赋值给另一个数组_如何把一个固定数组的值传递给另外一个数组...
  3. 免费云服务器无限流量,云服务器弄无限流量
  4. html5控制两个重叠div的显示隐藏,2个重叠的div分别设置了hover但是只能显示一个div的hover效果?...
  5. pythonexcel运用_python怎样在excel中应用?
  6. 4天快速入门python数据挖掘_4天快速入门Python数据挖掘
  7. 对于FAMNIST中的十种动物和水果进行识别测试
  8. 使用ESP32 MicroPython I2C功能读取 BH1750光度传感器模块数据
  9. 2021-春季学习-智能车技术创新与实践-Lesson3
  10. 在MATPLOTLIB中加入汉字显示