Java并发编程

本文介绍了Java内存模型(JMM)的规则,关注可见性、原子性和有序性的概念,以及volatile关键字的作用。还探讨了CPU缓存一致性协议MESI和Synchronized在并发编程中的角色,包括锁的状态转换机制。
摘要由CSDN通过智能技术生成

提示:这里可以添加技术概要

JMM(Java Memory Mode)

JMM描述的是一种抽象的概念,并不真实存在,是一组规则,通过这组规则控制程序中各个变量在共享数据区域和私有数据区域的访问方式,JMM是围绕原子性,有序性、可见性展开.
在这里插入图片描述
这里需要注意主存和工作内存

可见性

volatile(能否及时看见)

原子性

num++,//实际不止一个操作1.读 2.加1

有序性

volatile可以禁止指令重排序
原理:硬件层的内存屏障

CPU缓存一致性协议MESI

在这里插入图片描述
cpu早期使用总线保证缓存一致,但这样不能体现出多核cpu的优势
后期采用缓存一致性

缓存有4个状态M:修改 、E:独享、S:共享、I无效
缓存行:缓存存储数据的单元,大小64byte
若产生缓存一致性问题,这个缓存是S共享状态,bus总线来决策加锁,若thread-a加锁,会通知thread-b丢弃原来的数据
在这里插入图片描述

在这里插入图片描述
happen-before
一组并发编程的规则

Synchronized

synchronized代码块是由一对儿monitorenter/monitorexit指令实现的
对象在内存中分为三块:
1.对象头:用于存储对象自身的运行时数据, 如哈希码
(HashCode)、GC分代年龄、锁状态标志、线程持有的锁、偏向线程ID、偏向时间戳等等,它是实现轻量级锁和偏向锁的关键
2.实例数据
3.对齐填充
在这里插入图片描述
锁的状态总共有四种,无锁状态、偏向锁、轻量级锁和重量级锁。随着锁的竞争,锁可以从偏向锁升级到轻量级锁,再升级的重 量级锁,但是锁的升级是单向的,也就是说只能从低到高升级,不会出现锁的降级。
在这里插入图片描述
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值