并发编程笔记2

第六天 界面操作及美化(6.4 使用GUI 套件) 本文介绍如何使用VIPM工具安装DMC GUI套件:首先打开VIPM并连接网络,搜索"UI"找到DMCGUI套件后下载安装;安装完成后即可在VIPM中添加控件并预览效果。该方法同样适用于下载其他UI套件,用户可根据需求设计个性化界面。整个流程包括搜索、下载、安装和使用四个简单步骤,适合快速搭建GUI界面。 阅读详情

并发编程笔记1-优快云博客

一、synchronized与volatile的区别

synchronized

  • 保证读写操作的原子性和可见性,通过锁机制实现线程安全
  • 可修饰方法(静态/非静态)或代码块
  • 非静态方法锁为对象锁,静态方法锁为类锁
  • 锁升级过程:无竞争时偏向锁 → 竞争时轻量级锁 → 持续竞争升级为重量级锁(不可逆)

volatile

  • 仅保证可见性和禁止指令重排序,不保证原子性
  • 只能修饰变量
  • 底层通过Lock前缀指令强制缓存回写,并触发MESI协议使其他处理器缓存失效

二、内存模型与线程交互

JVM内存区域

  • 方法区:存储类信息、静态变量(JDK 8后由元空间替代)
  • 堆:存储对象实例,多线程共享
  • 栈:存储方法调用帧与局部变量,线程私有

多线程数据访问

  • 共享堆内存变量需通过同步机制(如synchronized)保证安全
  • 每个线程拥有独立的工作内存(缓存),volatile强制数据刷新到主内存

三、volatile实现原理

硬件级机制

  1. Lock前缀指令

    • 触发处理器缓存回写到主内存
    • 现代CPU通过缓存锁定(非总线锁定)实现高效独占
  2. 缓存一致性协议(MESI)

    • 监听总线操作,发现共享变量被修改时使本地缓存失效
    • 下次读取时强制从主内存重新加载

局限性

  • 无法解决写后读的竞态条件(如i++需配合synchronized或原子类)

四、锁的优化与问题

synchronized锁升级

  • 偏向锁:单线程无竞争时直接获取
  • 轻量级锁:竞争轻微时通过CAS自旋尝试
  • 重量级锁:竞争激烈时线程阻塞,依赖操作系统互斥量

锁的副作用

  • 重量级锁导致上下文切换开销
  • 非静态方法锁影响同一实例的其他同步方法
  • 静态方法锁影响整个类的同步方法

五、原子类与CAS问题

Java原子类

  • AtomicInteger、AtomicReference等基于CAS实现
  • 适用场景:计数器、状态标志等轻量级同步

CAS三大问题

  1. ABA问题
    • 解决方案:使用版本号(如AtomicStampedReference)
  2. 循环时间长开销大
    • 自旋CAS可能消耗CPU资源
  3. 只能保证单个变量原子性
    • 复合操作需借助锁或AtomicReference

六、指令重排序与并行机制

流水线并行

  • CPU将指令拆分为多个阶段(取指、译码、执行等)
  • 不同指令的阶段可并行执行以提高吞吐量

重排序规则

  • 编译器/处理器在不改变单线程语义的前提下优化指令顺序
  • 数据依赖性(如写后读)会阻止重排序

内存屏障

  • volatile通过插入屏障禁止特定重排序
  • 确保修改对其他线程立即可见

如何配置SSC CANopen的excel文件 如何配置 CANOpen 的 EXCEL 文件 阅读详情

相关推荐

HTML入门(详细教程),前端入门从这里开始

HTML基础教程,网页框架搭建,表单制作,了解HTML标签的基本用法,每个标签具备哪些属性。

wandertp的博客 1285

python并发编程笔记2

python并发编程笔记2 是根据蚂蚁学Python的视频做的笔记,方便自己后续回顾 视频链接:BV1bK411A7tV 老师的源码 这一份笔记对应的是视频的P3-P4 文章目录python并发编程笔记2P3-Python速度慢的罪魁祸首,全局解释器锁GIL1、Python速度慢的两大原因2、GIL是什么?3、为什么有GIL这个东西?4、怎样规避GIL带来的限制?1、多线程threading用于IO密集型计算,不用于CPU密集型计算2、使用multiprocessing的多进程机制实现并行计算、利用多核CP

nova1318的博客 287

用V E S C 6-M K V I 第六代调速控制器给VESC电调刷固件

文章摘要:本文介绍了一款先进的电机控制器,具备多项创新技术。核心亮点包括三相电流/电压检测、四象限无缝运行、多模式兼容等先进电机控制技术,以及智能感知与安全保护、高效能电源管理、多样化连接与扩展功能。此外,该控制器支持实时数据监测与用户交互,具备开源生态和工业级可靠性,适用于电动载具、机器人及工业领域。用户需注意散热要求和兼容性提示,可通过VESC-Tool软件进行灵活配置。产品可在常竹科技淘宝店购买,并加入技术交流群获取支持。

2403_89422757的博客 1367

JUC并发编程笔记2

省流: 自己笔记,划走~~~~ 缓存更新策略

m0_44954707的博客 418

SD--根据订单创建出库单(相关的函数列表的介绍系列篇(2))

创建订单样例代码参见:http://blog.youkuaiyun.com/CompassButton/archive/2007/05/09/1601712.aspx 可以根据一个订单或者部分订单项来创建出库单,代码如下:* Populating the item data lx_sales_item-ref_doc = l_vbeln. lx_sales_item-ref_item = c_000010

SAP BLOG--Jack Wu 6227

WSL2 Ubuntu复现FoundationPose项目(docker)

复现一个基于深度学习的物体姿态估计框架FoundationPose项目,使用docker,WSL2

woaidawangwang的博客 2001

并发编程学习笔记2

并发编程第3章,共享对象 synchonized不仅仅是将代码块声明成原子操作,而且管理的变量在内存中的可见性,保证其他代码看到的值是真实的值。应该是直接操作主存 3.1可见性 由于java内存模型的关系,变量的可见性也变的有些诡异。jmm有主存和本地存储的区别。当一个变量的值在本地存储中改变了,那么其他线程从主存中读取值时,很有可能是不能及时获取到最新的值的。这就是可见性。 锁可以实现这...

jncz 198

从零手写神经网络:用NumPy实现全连接网络与反向传播

神经网络本质上是可微分的函数复合体,其核心在于仿射变换与非线性激活的交替堆叠,以及基于链式法则的自动微分实现。理解前向传播的矩阵运算逻辑和反向传播的梯度流动机制,是掌握深度学习底层原理的关键路径。权重初始化(如He/Xavier)、激活函数选择(ReLU/Sigmoid)与数值稳定性处理(如1e-8防下溢)共同决定了训练的收敛性与鲁棒性。这些基础要素不仅支撑学术推导,更直接影响工业场景中的模型调试、FPGA部署及梯度异常定位。本文以纯NumPy实现三层全连接网络为载体,聚焦‘From Scratch’过程中

weixin_32495691的博客 286

java并发编程之美读书笔记-2

java并发编程之美读书笔记-2 每个Random实例里面都有一个原子性的种子变量用来记录当前的种子值,当要生成新的随机数时需要根据当前种子计算新的种子并更新回原子变量。在多线程下使用单个Random实例生成随机数时,当多个线程同时计算随机数来计算新的种子时,多个线程会竞争同一个原子变量的更新操作,由于原子变量的更新是CAS操作,同时只有一个线程会成功,所以会造成大量线程进行自旋重试,这会降低并...

tianyadaoke2020的博客 351

训练救星!EMA多尺度注意力让YOLOv11轻松攻克自定义数据集不涨点难题

在目标检测模型训练中,自定义数据集不涨点是阻碍算法落地的核心痛点之一。传统训练策略在数据分布特殊、样本量有限的场景下极易陷入收敛停滞,而 EMA(指数移动平均)结合多尺度注意力的方案,在自定义数据集上实现mAP 提升 6.5%,同时让训练曲线从“平缓停滞”转为“持续攀升”,彻底解决创新点在自有数据上的性能瓶颈。本教程将带你从原理到实践,通过 EMA 多尺度注意力为 YOLOv11 注入训练稳定性,让你的自定义数据集模型训练实现质的飞跃。EMA 衰减率:小样本数据集建议将decay。

FJN110的博客 161

人形机器人电路板和算法分析

人形机器人电路板与算法深度剖析 电路板领域:人形机器人电子系统分为计算、驱动、感知、能源、通信五大模块。主控板采用高性能SoM(如NVIDIA Jetson AGX Orin),需满足严格电源完整性(PDN)与信号完整性(SI)要求;关节驱动板集成MCU、GaN/SiC功率器件及高精度编码器接口,采用刚柔结合PCB以适应狭小空间。挑战包括热-振可靠性(85°C/10G振动)、高密度互连(3mil线宽)及EMC兼容性。 算法领域:运动控制依赖MPC(模型预测控制)与强化学习(RL),实现实时动态平衡;感知算法

几十年资深高级架构师,技术专家的技术笔记。专注C、Java、Python、微服务、云原生、AI工程化及高并发系统分布式架构实战,分享源码剖析、性能调优与架构治理经验。 307

Java并发编程学习笔记2

5.八锁现象 判断锁的是谁 锁new的对象或类的Class对象 8锁就是关于锁的8个问题 参考博客:https://www.cnblogs.com/itiaotiao/p/12651573.html 6.集合类不安全 并发下ArrayList不安全 解决方案 1、List<String> list=new Vector<>(); 2、List<String> list=new Collections.synchronizedList(new ArrayList<&g

a3026836480的博客 154

【SpringBoot 3.x 第56节】再见 Feign?原生 HTTP 接口强势上位,这才是微服务调用的正确姿势!

🏆本文收录于《滚雪球学SpringBoot 3》,专门攻坚指数提升,本年度国内最系统+最专业+最详细(永久更新)。    本专栏致力打造最硬核 SpringBoot3 从零基础到进阶系列学习内容,🚀均为全网独家首发,打造精品专栏,专栏持续更新中…欢迎大家订阅持续学习。 如果想快速定位学习,可以看这篇【SpringBoot3教程导航帖】,你想学习的都被收集在内,快速投入学习!!两不误。    若还想学习更多,可直接前往《滚雪球学SpringBoot(全版本合集)》,涵盖SpringBoot所有版本教学文章

**My Coding Family** 1017

并发编程笔记-2

并发编程的核心,是在保证线程安全的前提下,兼顾性能。本文从基础的局部变量跨线程访问,到volatile、synchronized的核心原理,再到锁粒度、伪共享等进阶知识点,层层拆解了并发编程的关键逻辑,同时规避了新手高频误区。

m0_63611023的博客 377

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

并发编程笔记(2)

四.共享模型之内存 1、Java 内存模型(JMM) JMM 即 Java Memory Model,它定义了主存(共享内存)、工作内存(线程私有)抽象概念,底层对应着 CPU 寄存器、缓存、硬件内存、 CPU 指令优化等。 JMM 体现在以下几个方面 原子性 - 保证指令不会受到线程上下文切换的影响 可见性 - 保证指令不会受 cpu 缓存的影响 有序性 - 保证指令不会受 cpu 指令并行优化的影响 2、可见性 1)退不出的循环 解决方法 使用...

qq_41775321的博客 461

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

C++并发编程实战第2版笔记

若要将某个类的成员函数设定为线程函数,应传入一个函数指针,指向该成员函数。此外,还要给出合适的对象指针,作为该函数的第一个参数。标准库中有一些类是只可移动但不可复制的,如。若源对象是临时变量,移动就会自动发生。若源对象是具名变量,则必须通过调用。

随手写下笔记和感悟 715

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

Java并发编程实战笔记—— 并发编程2

1、ThreadLocal   Java中的ThreadLocal类可以让你创建的变量只被同一个线程进行读和写操作。因此,尽管有两个线程同时执行一段相同的代码,而且这段代码又有一个指向同一个ThreadLocal变量的引用,但是这两个线程依然不能看到彼此的ThreadLocal变量域。ThreadLocal类提供了get和set等访问接口,这些方法为每个线程都存有一个独立的副本,因此每次get总...

weixin_30426879的博客 85

笔记《Java并发编程实战》[2]

结构化并发应用程序 1)任务执行:当围绕“任务执行”来设计应用程序结构时,第一步就是要找出清晰的任务边界。在理想情况下,各个任务之间是相互独立的:任务并不依赖于其他任务的状态、结果或边界效应。【如:大多数服务器应用程序:以独立的客户请求为边界。Web服务器、邮件服务器、文件服务器、EJB服务器以及数据库服务器等,均通过网络接受远程客户的连接请求】 2)任务取消原因:用户请求取消、有时间现在的操...

三思而后行 156

java并发编程的艺术笔记2之Java内存模型

目录 二.Java内存模型 1.Java内存模型的基础 1.1并发编程模型的两个关键问题 1.2Java内存模型的抽象结构 1.3 从源代码到指令序列的重排序(为了提高性能) 1.4 并发编程模型的分类 1.5 happens-before (:一个操作的结果需要对另一个操作可见,可在不同线程) 2.重排序 3.顺序一致性 3.1顺序一致性内存模型的两大特性 3.2 顺...

worldeert的博客 265

java并发编程的艺术笔记1-2章

第一章 并发编程的挑战 多线程带来的上下文切换的成本 频繁的切换上下文的效率开销某些情况下还不如单线程效率高 减少上下文切换的手段: 减少上下文切换的方法有无锁并发编程、CAS算法、使用最少线程和使用协程。 ·无锁并发编程。多线程竞争锁时,会引起上下文切换,所以多线程处理数据时,可以用一些办法来避免使用锁,如将数据的ID按照Hash算法取模分段,不同的线程处理不同段的数据。 CAS算法。Java...

程序员!我当定了! 282

【笔记】【Java并发编程实战】2线程安全

注:本文为笔者阅读《JAVA并发编程实战》(Brian Goetz等注)一书的学习笔记,如有错漏,敬请指出。 线程安全的界定:当多个线程访问一个类时,如果不用考虑这些线程在运行时环境下的调度和交替执行,并且不需要额外的同步、在调用代码方无须作其他协调,这个类的行为依然是正确的,称这个类是线程安全的。(我的理解:找不出并行执行与串行执行结果相异的情况)构建并发程序要正确使用线程和锁。编写线程安全的代码,本质上是管理对状态的访问,而且通常是共享、可变的状态。一般而言,一个对象的状态就是它的数据(存储在状态变量中

julia_xueli的博客 801

Java 并发编程学习笔记 2

Java 并发编程笔记

@码农充电站的专栏 442

Java并发编程实战笔记2.0

1.用锁的最佳实践 1.永远只在更新对象的成员变量时加锁 2.永远只在访问可变的成员变量时加锁 3.永远不在调用其他对象的方法时加锁 2.信号量模型 信号量模型可以简单概括为:一个计数器,一个等待队列,三个方法。 init():设置计数器的初始值。 down():计数器的值减 1;如果此时计数器的值小于0,则当前线程将被阻塞,否则当前线程可以继续执行。 up():计数器的值加...

过河的小卒子的博客 746

《Java并发编程的艺术》读后笔记-part2

在我们了解实现原理之前先了解一下CPU的术语,便于后续理解。volatile是如何来保证可见性的呢?我们这里用汇编指令来具体解析有volatile和无volatile的区别。Java代码:// instance是volatile变量转变成的汇编代码,如下:有volatile变量修饰的共享变量进行写操作的时候会多出第二行汇编代码,通过查IA-32架构软件开发者手册可知,Lock将当前处理器缓存行的数据写回到系统内存。这个写回内存的操作会使在其他CPU里缓存了该内存地址的数据无效。

2401_85767131的博客 505

【C++】《C++ 并发编程实战 (第2版) 》笔记-汇总

一、C++ 并发世界 同一进程内的所有进程都共用相同的地址空间,且所有线程都能直接访问大部分数据。 每个线程都需要独立的栈空间,如果线程太多,就可能耗尽所属进程的可用内存或地址空间。 管控线程的函数和类在中声明,而有关共享数据保护的声明则位于别的头文件中。 每个线程都需要一个起始函数,新线程从这个函数开始执行。就应用程序的起始线程而言,该函数是main()。对于别的线程,其起始函数需要在std::thread对象的构造函数中指明。 新线程启动后,起始线程继续执行。如果起始线程不等待新线程结束,就会一路执行

江湖人称菠萝包 3879

并发编程学习笔记2——管程、Lock & Condition、信号量

文章目录一、管程1.什么是管程2.MESA 模型互斥同步3.锁的正确用法4.wait() 的正确使用5.notify() 何时可以使用二、Lock和Condition1.Lock2.可重入锁3.可重入函数4.公平锁与非公平锁5.加锁的最佳实践思考题 一、管程 1.什么是管程 Java 采用的是管程技术,synchronized 关键字及 wait()、notify()、notifyAll() 这...

耶律妙月的博客 1221
上一篇: JAVA线程安全类
下一篇: Servlet学习
xuhaoyu_cpp_java
博客等级 码龄2年 2粉丝 112原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值