Java并发编程------线程安全问题:原子性,可见性,有序性和其物理层原理

本文从CPU和线程的发展历程出发,探讨并发编程中的原子性、可见性和有序性问题。介绍了多核CPU带来的缓存一致性问题,以及处理器优化和指令重排对并发的影响。Java内存模型(JMM)通过限制处理器优化和使用内存屏障来解决这些问题,确保多平台下的内存访问一致性。Java提供了synchronized、volatile等关键字来保证并发操作的原子性、可见性和有序性。
摘要由CSDN通过智能技术生成

版权声明:本文为博主原创文章,未经博主允许不得转载https://blog.csdn.net/martin_ke/article/details/88783367

并发编程,学起来很乱,很有可能是没有形成一个知识体系,在我看来学习技术知识应该有纵横两个维度。横向,去对比技术的发展,就比如我们的CPU有单核的发展到多核的,实现了真正意义上的并发,那么产生怎么样的问题呢?又是怎么去解决的呢?纵向就是去一层一层剥悉技术的实现原理,比如我们用synchronized去解决原子性问题,为什么synchronized可以解决原子性问题呢?

那么我们的故事就从CPU和线程的发展历程开始吧。

早期我们的CPU,并不会存储指令,当我们在输入指令的时候,CPU是处于等待状态的。这样是没有充分利用到资源。
随着发展,就出现了批处理,我们先把一连串的指令写到磁带上,然后计算器自己去执行并回写结果。
截止到这里,我们的CPU处理方式仍然是以串行的方式去处理的。这样子会有一个问题,就是下一个指令永远要等上一个指令执行完才能执行,那么如果某一个指令在执行的过程中,在做一些操作的时候阻塞了,那么其他的后续指令都只能等待着,导致CPU也一直空闲着。
那么,人们就想,当某一个指令阻塞了的话,那就让空闲的CPU去执行其他的指令。那么在单核CPU的时代,其实就是CPU的时间片不断切换。(在这个过程中,基于各个进程之间互不干扰和当CPU再次切换回来的时候,知道从哪里开始执行的考虑,进程就被设计出来了。)但是,这其实是一种伪并发,因为并不是

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值