java指令重排序代码演示
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指令重排序代码演示相关推荐
- 【Java 并发编程】指令重排序规范 ( happens-before 先行发生原则 )
文章目录 一.指令重排序规范 二.happens-before 先行发生原则 一.指令重排序规范 指令重排指的是 , 线程中如果两行代码 没有逻辑上的上下关系 , 可以对代码进行 重新排序 ; JVM ...
- 【Java 并发编程】线程指令重排序问题 ( 指令重排序规范 | volatile 关键字禁止指令重排序 )
文章目录 总结 一.指令重排序规范 二.指令重排序示例 总结 Java 并发的 333 特性 : 原子性 : 每个操作都是 不可拆分的原子操作 ; 在线程中进行 a++ 就不是原子操作 , 该操作分为 ...
- 说说Java中原子性,可见性与指令重排序的理解
原子性:就是读数据,处理数据,写数据 这三个步骤不能被终止,或者打断:就是不能被线程调度器中断,切换线程. 这样,才能保证,原子操作在线程切换,并行处理上保证数据地顺序累加处理. 可见性:是Jvm较为 ...
- java重排序_Java synchronized 能防止指令重排序吗?
@ZealTalk 说的是 synchronized 可以防止指令重排,这个观点不对的,也欢迎回答的各位来讨论 synchronized 的有序性 来讨论这个问题先,先看看 Java 里的操作无序现象 ...
- Java的多线程机制系列:(四)不得不提的volatile及指令重排序(happen-before)
一.不得不提的volatile volatile是个很老的关键字,几乎伴随着JDK的诞生而诞生,我们都知道这个关键字,但又不太清楚什么时候会使用它:我们在JDK及开源框架中随处可见这个关键字,但并发专 ...
- Java指令屏障_指令重排序和内存屏障
sap hana计算技术项目实战指南内存 61元 (需用券) 去购买 > 一.指令重排序 指令重排序分为三种,分别为编译器优化重排序.指令级并行重排序.内存系统重排序.如图所示,后面两种为处理器 ...
- 由Java引起的指令重排序思考
背景 问题出现 最近遇到了一个NullPointerException,虽然量不大,但是很怪异,大致长这个样子 这是个什么空指针?居然说我LinkedList.iterator().hasNext() ...
- Java并发编程之指令重排序
在我们面试过程中,通常避免不了会被问到什么是指令重排序?本文就这个问题进行探索. 重排序 前言 一.重排序种类 二.happens-before 三.重排序 1.数据依赖性 2. as-if-seri ...
- java volidate线程安全_03.(多线程与并发)面试题-02--Volidate的原理和指令重排序
线程栈(线程的工作内存)保存了线程运行时候变量值信息.当线程访问某一个对象时候值的时候,首先通过对象的引用找到对应在堆内存的变量的值,然后把堆内存变量的具体值load到线程本地内存中,建立一个变量副本 ...
最新文章
- 一分钟先生之拨云见日看绩效
- 不忘初心,恪守信条:微盟经历的从删库到跑路的数据灾难
- java 工作一年_干java工作了快一年,到底会了什么
- 网易云音乐虚化图片html,CSS之高斯模糊—(网易云歌单)
- 关于L298N电机驱动模块
- 杂评 360和腾讯之争
- 十一假期,终于过上了理想的生活节奏
- 【黑马Java笔记+踩坑】Maven高级
- 大数据开发就业:大数据开发有哪些岗位
- 记录常用正则表达式(亲测,有用)
- 概述-元数据是什么?
- NumPy 快速入门系列:应用统计学基础概念、相关统计指标与NumPy的实现
- 【深度好文】香港富豪卧底贫民窟:“你没出息,是因为不努力”害了多少程序员
- linux降低磁盘的读,Linux磁盘I/O优化:vm.dirty_ratio - 米扑博客
- 【自动化】DCS PLC区别;PLC常见的六大应用
- C#如何解析UTF-8编码
- 7-17 找最贵的书和最便宜的书
- 上海交通大学计算机考研资料汇总
- 2023年天猫618淘宝大赢家每日1猜:哪系列是NB夏日潮流必备?今日答案是什么?淘宝天猫618红包口令怎么领取?
- 第八周 oj 2399 求倒数和
热门文章
- 同步和串行的区别_[深度思考]·为什么CNN是同步(并行)而RNN是异步(串行)的呢?...
- c语言把一个数组赋值给另一个数组_如何把一个固定数组的值传递给另外一个数组...
- 免费云服务器无限流量,云服务器弄无限流量
- html5控制两个重叠div的显示隐藏,2个重叠的div分别设置了hover但是只能显示一个div的hover效果?...
- pythonexcel运用_python怎样在excel中应用?
- 4天快速入门python数据挖掘_4天快速入门Python数据挖掘
- 对于FAMNIST中的十种动物和水果进行识别测试
- 使用ESP32 MicroPython I2C功能读取 BH1750光度传感器模块数据
- 2021-春季学习-智能车技术创新与实践-Lesson3
- 在MATPLOTLIB中加入汉字显示