java 并发的三大特性

CPU 三级缓存架构

为平衡CPU与主存的处理速度问题,提出在CPU中设置多级缓存机制。

当CPU要读取一个数据时,首先从一级缓存中查找,如果没有找到再从二级缓存中查找,如果还是没有就从三级缓存或内存中查找。

每个核心都含有一套L1(甚至和L2)缓存,而共享L3(或者和L2)缓存

如果三级缓存都没有,则需要通过主存加载

多核多级缓存数据一致性问题:采用 CPU 缓存一致性协议实现 MESI

java内存模型JMM

内存模型:定义了共享内存系统中多线程程序读写操作行为的规范。通过这些规则来规范对内存的读写操作,从而保证指令执行的正确性。

1)主存区: 所有的共享变量必须存放在主存中

2)线程工作区:从主存中读取共享变量的副本,在工作区进行计算,将计算结果更新到主存区

在多线程下修改共享变量,存在数据的可见性、原子性、有序性问题

1、原子性

java通过 字节码指令monitorenter和monitorexit 控制原子性

在AtomicInteger等原子类中,使用CAS机制,进行数据更新

CAS:调用底层的sun.misc.Unsafe类,属于native,本质上是通过CPU硬件特性,自动锁定数据总线

2、可见性

使用volatile 

被其修饰的变量在被修改后可以立即同步到主内存,

被其修饰的变量在每次使用之前都从主内存刷新

3、有序性

使用volatile 申明变量

禁止指令重排(通过内存屏障--CPU指令 )

●在每一个volatile的写(store)之前,加入一个StoreStore屏障和一个LoadStore屏障
●在每一个volatile的写(store)之后,加入一个StoreLoad屏障和一个StroeStore屏障
●在每一个volatile的读(load)之后,加一个LoadLoad屏障和LoadStrore屏障
 

  • 7
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

宣晨光

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值