Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >2020-11-12:java中as-if-serial语义和happen-before语义有什么区别?

2020-11-12:java中as-if-serial语义和happen-before语义有什么区别?

原创
作者头像
福大大架构师每日一题
修改于 2020-11-16 01:52:32
修改于 2020-11-16 01:52:32
2670
举报

2020-11-12:java中as-if-serial语义和happen-before语义有什么区别?

2020-11-12:java中as-if-serial语义和happen-before语义有什么区别?

福哥答案2020-11-12:

as-if-serial语义单线程执行结果不被改变。

happen-before语义正确同步的多线程执行结果不被改变。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
as-if-serial规则和happens-before规则的区别
为了在不改变程序执行结果的前提下,尽可能地提高程序执行的并行度,我们需要了解as-if-serial规则和happens-before规则
Java架构师必看
2021/07/14
9680
(四) 一文搞懂 JMM - 内存模型
用户7630333
2023/12/07
3.1K0
(四) 一文搞懂 JMM - 内存模型
【死磕Java并发】—– Java内存模型之重排序
在执行程序时,为了提供性能,处理器和编译器常常会对指令进行重排序,但是不能随意重排序,不是你想怎么排序就怎么排序,它需要满足以下两个条件: 在单线程环境下不能改变程序运行的结果; 存在数据依赖关系的不允许重排序 如果看过LZ上篇博客的就会知道,其实这两点可以归结于一点:无法通过happens-before原则推导出来的,JMM允许任意的排序。 as-if-serial语义 as-if-serial语义的意思是,所有的操作均可以为了优化而被重排序,但是你必须要保证重排序后执行的结果不能被改变,编译器、runt
芋道源码
2018/03/02
7360
【死磕Java并发】—– Java内存模型之重排序
简述Java内存模型
在介绍Java内存模型(JMM)前,我要打消读者一个错误的认知,那就是JMM与JVM到底是什么关系,现在告诉大家,Java虚拟机模型(JVM)与Java内存模型(JMM)没有本质上的联系。为什么这么说,我来解释一下:想必我的读者大部分都是Java开发工程师,成为一名Java开发工程师必备的两点,就是要了解Java的语法,以及使用Java API,拥有这两点你就可以编写Java代码,编写后的代码需要在Java虚拟机上运行,其实上面我已经把JDK的组成说了出来。JDK(Java Development Kit)就是由Java程序设计语言、Java API类库、Java虚拟机这三部分组成的,是Java程序开发的最小环境(如图2-6所示)。也就是说想要开发Java程序,必备的就是JDK。我们还可以继续把Java API类库分成Java SE API子集和Java虚拟机两部分统称JRE(Java Runtime Environment),JRE是Java程序运行的标准环境。所以说Java虚拟机模型(JVM)是将Java文件编译成class文件并运行class文件的软件,而Java内存模型(JMM)主要定义了线程与内存之间的细节,现在看来两者并没有直接的关系。
胖虎
2020/12/08
4490
JMM—详细总结
Java并发的通信机制是通过共享内存实现的。线程之间共享程序的公共状态,线程通过读写内存中的公共状态进行隐式通讯。这对程序员是透明的,我们需要理解其工作机制,以防止内存可见性问题,从而编写出正确同步的代码。
用户5325874
2020/01/16
7370
JMM—详细总结
干货 | 聊聊java并发(上)
既然聊并发,我们首先会思考为什么要引入这个技术。通常写程序,我们习惯用单线程串行的思维理解程序运行, 编写业务逻辑(实际上我们通常的代码并不是按顺序串行执行的,只是看上去像,as-if-serial)。 这样可以减少复杂度,也便于测试,往往当需要性能提升,我们才会想到使用并发。那么为什么要并发呢?
杨振涛
2019/03/19
9270
干货 | 聊聊java并发(上)
JMM和底层实现原理
线程的通信是指线程之间以何种机制来交换信息。在编程中,线程之间的通信机制有两种,共享内存和消息传递。 在共享内存的并发模型里,线程之间共享程序的公共状态,线程之间通过写-读内存中的公共状态来隐式进行通信,典型的共享内存通信方式就是通过共享对象进行通信。 在消息传递的并发模型里,线程之间没有公共状态,线程之间必须通过明确的发送消息来显式进行通信,在java中典型的消息传递方式就是wait()和notify()。
allsmallpig
2021/02/25
9100
Java并发——volatile(十一)
volatile是 Java 的一个关键字,是一种同步机制。volatile的作用是作为指令关键字,确保本条指令不会因编译器的优化而省略,且要求每次直接读值。
翰墨飘香
2024/07/04
5040
【并发编程】一文带你读懂深入理解Java内存模型(面试版本)
主线如上图红色箭头,大家可以先看看整体讲的是什么。java内存模型前面是铺垫,后面是相关内容。
java进阶架构师
2019/01/02
1.8K0
详解java多线程锁
多线程程序是并发编程的核心,而Java多线程锁则是保证线程安全的重要手段。但是,不同类型的锁适用于不同的场景,而正确地选择锁对于程序的性能和正确性至关重要。在本文中,我们将深入探讨Java多线程锁的工作原理和最佳实践。
仙士可
2023/03/18
8470
详解java多线程锁
volatile(2)
现代处理器采用了指令级并行技术(Instruction-Level Parallelism, ILP)来将多条指令重叠执行。如果不存在数据依赖性,处理器可以改变语句对应机器指令的执行顺序。
黑洞代码
2021/01/14
3820
volatile(2)
指令重排序
指令是指示计算机执行某种操作的命令,如:数据传送指令、算术运算指令、位运算指令、程序流程控制指令、串操作指令、处理器控制指令。指令不同于我们所写的代码,一行代码按照操作的逻辑可以分成多条指令。
Qwe7
2022/08/07
3950
4个点说清楚Java中synchronized和volatile的区别
1、Java语言为了解决并发编程中存在的原子性、可见性和有序性问题,提供了一系列和并发处理相关的关键字,比如synchronized、volatile、final、concurren包等。
程序员追风
2019/08/27
1.3K0
4个点说清楚Java中synchronized和volatile的区别
JMM1、基础与概念2、重排序6、锁7、java concurrent包的通用化的实现模式7、final8、双重检查和延迟优化
1、基础与概念 (1)、共享性、互斥性、原子性、可见性、有序性。 (2)、JMM内存模型——描述线程本地内存和主内存之间的抽象关系。线程A和线程B之间通讯,需要通过主内存。 JMM属于语言级的内存模型
JavaEdge
2018/05/16
7100
JMM 最最最核心的概念:Happens-before 原则
关于 Happens-before,《Java 并发编程的艺术》书中是这样介绍的:
飞天小牛肉
2021/05/14
8100
JMM 最最最核心的概念:Happens-before 原则
深入理解Java内存模型(二)——重排序
数据依赖性 如果两个操作访问同一个变量,且这两个操作中有一个为写操作,此时这两个操作之间就存在数据依赖性。数据依赖分下列三种类型: 名称 代码示例 说明 写后读 a = 1;b = a; 写一个变量之后,再读这个位置。 写后写 a = 1;a = 2; 写一个变量之后,再写这个变量。 读后写 a = b;b = 1; 读一个变量之后,再写这个变量。 上面三种情况,只要重排序两个操作的执行顺序,程序的执行结果将会被改变。 前面提到过,编译器和处理器可能会对操作做重排序。编译器和处理器在重排序时,会遵守数据依
小小明童鞋
2018/06/13
6890
浅析-JMM内存模型
Java内存模型(Java Memory Model ,JMM)就是一种符合内存模型规范的,屏蔽了各种硬件和操作系统的访问差异的,保证了Java程序在各种平台下对内存的访问都能保证效果一致的机制及规范。
dot
2022/07/02
6020
【并发编程】三大基础特性
JMM(Java Memory Model)。不同的硬件和不同的操作系统在内存上的操作有一定差异的。
程序员波特
2024/04/20
970
【并发编程】三大基础特性
【java并发编程实战3】解密volatilevolatile的使用场景
根据 as if serial原则,它强调了单线程。那么多线程发生重排序又是怎么样的呢?
yukong
2018/10/09
2950
【java并发编程实战3】解密volatilevolatile的使用场景
并发学习笔记10-happens-before
JMM把happens-before要求禁止的重排序分为下面两类: - 会改变程序执行结果的重排序; - 不会改变程序执行结果的重排序。
WindCoder
2020/01/22
2970
相关推荐
as-if-serial规则和happens-before规则的区别
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档