浅谈JMM和并发三大特性(volatile、MESI、内存屏障)

本文深入探讨了Java内存模型(JMM)、并发的三大特性(可见性、有序性和原子性)以及CPU硬件架构和缓存一致性。讲解了volatile关键字如何保证可见性和有序性,分析了并发编程中如MESI协议、内存屏障等关键概念,并介绍了应对伪共享问题的解决方案。
摘要由CSDN通过智能技术生成

JMM是Java并发编程的基础模型,包含了逻辑架构和CPU物理架构的知识,JMM是并发专题的难点,加油。

内容大纲

  • 并行和并发
  • 并发三大特性
  • CPU硬件架构和缓存一致性
  • JMM
  • 可见性和volatile、lock前缀指令
  • 有序性和指令重排、内存屏障
  • 原子性

1.并发和并行

 

现代计算机模型中,CPU的最小调度单元就是线程,在OS中,县城管就是进程中的一条执行流程,同一个进程中多个线程可以共享代码片段、数据段、打开的文件等,但是每个线程都有专属自己的寄存器、栈结构。

1.1 并行

并行:在同一时刻,有多条指令在多个CPU核心上同时执行。

 

1.2 并发

并发:在同一时刻,同一个CPU核心上只能执行一条指令,多个线程被快速的调度切换来占用CPU核心的计算资源,在微观尺度上并不是同时执行,但在人类感触宏观表现是同时执行。并发的概念可以在单核架构存在,多核和多CPU同样也存在线程并发的概念。

 

2.并发三大特性

2.1 可见性

当一个线程修改了某个共享变量的值,其它线程应当能够立即看到修改后的值。Java使用共享内存模式来刷新内存方式来保证可见性。并发可见性问题的解决手段有:

        - volatile关键字(Java关键字)
        - 内存屏障
        - synchronized关键字保证(Java关键字)
        - CPU的lock前缀指令
        - final关键字保证(Java关键字)

2.2 有序性

程序执行代码指令的顺序应当保证按照程序指定的顺序执行,即便是编译优化,也应当保证程序源语一致。并发有序性问题的解决手段有:

        - volatile关键字
        - 内存屏障
        - synchronized关键字
        - lock前缀指令

2.3 原子性

一个或多个程序指令,要么全部正确执行完毕不能被打断,或者全部不执行。Java中,对基本数据类型的变量读取和赋值都是原子性操作(64位处理器),但是在32位处理器上对64位数据不能保证,例如Long/Double的计算。并发的原子性问题解决手段有:</

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值