并发编程三大原则

马士兵-郑金维—并发编程—2.并发编程三大特性 并发编程特性 阅读详情

首先我们需要先了解一下,在并发编程中的三大原则:

  1. 保证原子性
  2. 保证有序性
  3. 保证可见性

三面三大原则,都是在保证的是,多线程情况下,操作共享变量。如果每一个线程都自己玩自己的那就不会有线程安全问题,也就不会出现,所谓的并发编程的三大原则问题。所以在早年很老的计算机只有单核CPU的时候,这个问题就不会存在,因为,所有线程到CPU执行的时候,都是串行在执行,压根就不会出现并行的情况,我们感觉像是同时在执行,是因为CPU执行效率非常快在很短很短的时间内,来回切换不同的线程在执行。

我们首先来理解一下,上面的三个原则是什么意思:

1,保证原子性,就是在代码执行的过程中不能被,打断直到我执行流程完成。

        这个就是好比,一个正在演讲的人,拿着话筒(现场共同享有),你不在他演讲的时候把话筒拿开,如果你把话筒给拿开了,他就无法保证这场演讲的流程是一个完整的流程。你需要用话筒的话,你需要等我用完,放回去了你在用,你能不能用的上,那就看你能不能抢到了。这个其实就是一个保证原子性的很好的例子。

2,保证有序性,就是在代码执行的过程中,你不能乱序执行,只需要按照,字节码的顺序,逐行执行,要不然就会出错。

        那还是拿演讲来说,找场地,调试灯光,调试设备,调试其他的一些东西,等这些东西都已经弄好了,然后演讲人才能上台,拿着话筒开始演讲,你不能再什么都没有的情况下,直接让演讲人就开始,演讲,那这个样子不就会出现各种,问题吗。

3,可见性,可见性是什么意思呢,因为在,多线程共享,变量的情况下,每一个线程,都会吧共享变量给拷贝到自己的工作内存中,这样线程之间的变量就变成不可见的了。那这样的话,在操作完共享变量的时候,其他线程还是无法知道最新的值是什么,而在多线程中,在操作完共享变量后,其他线程必须可见。

        还是演讲的问题,在整个会场,只有一个话筒,但是这个话筒呢电量不足了,工作人员和演讲者,就是两条不同的线程,他们分别拿着话筒,工作人员是去换电池去了,演讲者拿着上台做演讲了,电池最多只能用5分钟,工作人员在后台换了电池后,赶紧把已经换好电的话筒给放了回去,那么这个时候,如果他们两个是不可见的话,演讲者压根就不知道,话筒已经换好电池了,他还在用那个没有换电池的话筒,那永不了多久就会出现各种状况了。

上面是对并发编程三大原则的解释跟理解

Java并发编程——volatile关键字 Java并发编程——volatile关键字概述一、内存模型二、并发编程的三个概念三、Java内存模型四、剖析volatile关键字4.1 volatile关键字的两层含义4.2 volatile能否保证原子性五、使用volatile关键字场景六、总结常见问题 概述 在 Java 并发编程中,要想使并发程序能够正确地执行,必须要保证三条原则,即:原子性、可见性和有序性。只要有一条原则没有被保证,就... 阅读详情

相关推荐

立创开源PEX88048 8盘位M.2扩展卡硬件设计与PCIE4.0交换机应用解析

本文详细解析了基于Broadcom PEX88048 PCIe 4.0交换芯片的8盘位M.2扩展卡硬件设计。文章深入探讨了核心芯片选型、关键供电与安全设计、引脚配置、固件刷写方法,并重点剖析了PCIe 4.0时钟架构与高速PCB布局的核心思想,旨在帮助开发者理解如何设计高性能、高可靠性的存储扩展方案,并有效控制成本。

weixin_28949937的博客 515

高并发三个基本原则

原子性--没有复合操作,要么全被执行,要么全不执行,不可中断。 内存可见性---需要考虑CPU缓存,JVM内存模型。 有序性---代码的运行顺序不一定跟编辑顺序一样。在Java中JVM会做一些优化调整没有数据依赖的操作的执行顺序,单线程中没有任何问题,但在高并发环境将会出现问题 ...

1024 1204

基于单片机智能家居控制系统设计

*单片机设计介绍,基于单片机智能家居控制系统设计。

QQ2193276455的博客 1688

Java——并发编程三要素

文章目录前言三要素1、原子性2、可见性3、有序性as-if-serial语义参考资料 前言 在并发编程中,我们通常会遇到以下三个问题:原子性问题,可见性问题,有序性问题。 但这三种问题分别又是什么,接下来做一个解释说明。 三要素 1、原子性 一个操作或者多个操作,要么全部执行并且执行的过程不会被任何因素打断,要么全部不执行! 【注】有点类似 事务! 一个很经典的案例: A向B转账。 当用户A向用户B转账时,必将执行两个步骤: 1、A扣除钱 2、B账户增加钱 假设上述的案例中,不存在原子性,那么

专注写bug 2109

1.1并发编程三要素是什么?

同时,在编写并发程序时,需要遵循并发编程的最佳实践,如避免共享变量、减少锁的粒度、避免死锁等。:可见性指的是多个线程之间对共享变量的修改是可见的。在并发编程中,如果一个线程修改了共享变量的值,其他线程可能无法立即看到这个变化,从而出现数据不一致的问题。:原子性指的是一个操作是不可中断的,即要么操作全部完成,要么操作完全没有执行。:有序性指的是程序执行的顺序是按照代码的顺序执行的。在并发编程中,由于多个线程之间的执行是异步的,所以程序的执行顺序可能会发生变化,从而导致程序出现错误。

Andrew_Lgx的博客 797

并发设计原则

为什么80%的码农都做不了架构师?>>> ...

weixin_34224941的博客 260

并发编程理论

一、内存模型: 计算机内存模型: 计算机在执行程序时,每条指令都是在CPU中执行的,而执行指令过程中,势必涉及到数据的读取和写入。由于程序运行过程中的临时数据是存放在主存(物理内存)当中的,这时就存在一个问题,由于CPU执行速度很快,而从内存读取数据和向内存写入数据的过程跟CPU执行指令的速度比起来要慢的多,因此如果任何时候对数据的操作都要通过和内存的交互来进行,会大大降低指令执行的速度。...

sinat_34814635的博客 733

并发编程三大原则之初识synchronized

先简单的理解一下 synchronized 这个关键是是什么东西,用在什么地方

Android_weilai的专栏 785

并发编程三大特性

不同的硬件和不同的操作系统在内存上的操作有一定差异的。Java为了解决相同代码在不同操作系统上出现的各种问题,用JMM屏蔽掉各种硬件和操作系统带来的差异。让Java并发编程可以做到跨平台。JMM规定所有变量都会存储在主内存中,在操作的时候,需要从主内存中复制一份到线程内存(CPU内存),在线程内部做计算。然后再写回主内存中(不一定!原子性的定义:原子性指一个操作是不可分割的,不可中断的,一个线程在执行时,另一个线程不会影响到他。i < 100;i++) {

埃泽漫笔 1515

JMM&并发编程三大问题

并发编程之JMM&并发编程三大问题

EnjoyFight的博客 360

Java】多线程和高并发编程(二):并发编程三大特性

不同的硬件和不同的操作系统在内存上的操作有一定差异的。Java为了解决相同代码在不同操作系统上出现的各种问题,用JMM屏蔽掉各种硬件和操作系统带来的差异。让Java并发编程可以做到跨平台。JMM规定所有变量都会存储在主内存中,在操作的时候,需要从主内存中复制一份到线程内存(CPU内存),在线程内部做计算。然后再写回主内存中(不一定!原子性的定义:原子性指一个操作是不可分割的,不可中断的,一个线程在执行时,另一个线程不会影响到他。i < 100;i++) {

专注上位机开发、机器视觉、机器学习、嵌入式软硬件开发 1万+

Java并发编程系列之三:Java内存模型

引言 在我们日常项目开发工作中,对于并发场景中经常出现的奇妙的Bug大都是由于变量的可见性、原子性以及有序性的不深入理解导致的。那我们该如何解决并发编程者三座大山呢,这就需要请出我们本文讨论的对象Java内存模型了。 并发编程三大特性说明 volatile原理 Java内存模型 总结 一、并发编程三大特性说明 1、原子性 所谓原子性操作,就是类似数据库的事务操作,对应的一个操作或者多个操作,要...

470

并发编程的问题来源:原子性,可见性,有序性。Happens-Before原则的总结

本文总结了并发编程中的问题来源:原子性,可见性以及编译优化带来的顺序性。同时重点总结了Java内存模型中的Happens-Before原则

ZhaoSimonone的博客 332

并发编程 之 可见性、原子性、volatile、synchronized、Java内存模型的深入剖析

代码执行的顺序没有按照预想的顺序进行,造成了有序性问题。有序分为相对有序、绝对有序。造成指令乱序的根本原因是:CPU指令重排序java中的线程间采用共享内存的方式进行隐式通信,同步则需要显示操作。如果不做显示的同步操作,多个线程间的操作顺序会不可控,不了解这种机制,就会遇到各种奇怪的内存不可见问题概要Java内存模型(JMM)是Java虚拟机并发知识中很重要的一部分,为了更好的理解它。我们先花费一点时间去了解物理计算机中的并发问题。

RubyWinner的博客 775

Java 并发编程】(三) 如何解决并发编程三大问题

并发编程三大问题在并发编程中,原子性、有序性和可见性是三个重要的问题,解决这三个问题是保证多线程程序正确性的基础。原子性: 指的是一个操作不可分割, 要么全部执行完成, 要么不执行, 不存在执行一部分的情况.有序性: 有序性是指程序的执行顺序与程序中代码的顺序一致。在多线程环境下,由于线程的交替执行和指令重排等因素,可能...

weixin_40363401的博客 136

《JMM 与 happens-before 原则并发编程的核心内存语义》

Java内存模型(JMM)与并发编程核心原则 Java内存模型(JMM)定义了多线程环境下共享变量的访问规则,解决了并发编程中的三大核心问题: 可见性问题:通过工作内存与主内存的同步机制保证 原子性问题:通过锁机制和volatile关键字保证 有序性问题:通过happens-before原则和内存屏障防止指令重排序 关键实现机制包括: happens-before八大规则:程序顺序、锁规则、volatile规则等 内存屏障:LoadLoad、StoreStore、LoadStore、StoreLoad四种屏

qq_43414012的博客 718

Java并发编程实战笔记

Java并发编程实战笔记

daweias的博客 435

并发编程总结

这里写目录标题一、基本概念1、线程什么是线程为什么使用多线程创建多少线程合适线程优先级守护线程线程间通信线程切换内核态用户态什么是用户态和内核态用户态和内核态切换触发条件死锁2、进程什么是进程进程间切换进程间通信进程调度算法3、协程4、Java 内存模型5、happens-before6、并发编程三大核心问题二、 基本操作1、创建线程的方式2、Callable 和 Runnable3、并发关键字synchronizedvolatilefianl4、Thread类常见方法sleepyieldjoininter

Jankin_Nian的博客 2378

Java并发编程(七):原子性、可见性、有序性与happens-before

一、三大特性 1.1 原子性 原子是化学反应中不可再分的基本微粒,其在化学反应中不可分割。在计算机中,它表示的是一个操作,可能包含一个或多个步骤,这些步骤要么全部执行成功要么全部执行失败,并且执行的过程中不能被其它操作打断,这类似于数据库中事务的原子性概念。 前文提到的:i = i + 1,就是一个非原子操作,它涉及到获取i,获取1,相加,赋值等4个操作,所以在多线程情况下可能会出现并发问题...

黄智霖的博客 1万+

mfcc.zip_MFCC

本程序是基于matlab的程序,功能是实现语音信号的mfcc

上一篇: 公正廉明的 ThreadLocal
下一篇: 并发编程三大原则之初识synchronized
专注一点
博客等级 码龄11年 354粉丝 15原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值