Java后端八股-------并发编程





















图中的 synchronized方法如果没有锁,那么可能会有超卖,数据错误等情况。

加锁之后会按顺序售卖。

synchronized的底层是monitor。



线程没有竞争关系的时候,引入了轻量级锁,当需要处理竞争关系的时候一定要用到重量级锁(线程的对象锁)。


mark word中重量级锁时,ptr_to_heavyweight_monitor是一个指向monitor的指针。

cas交换是用来保证原子操作的.

👆cas会做交换,交换地址值,这样其他线程就无法获取锁,但是自己的线程内可以多次获取锁(没有竞争关系时)。


在Java中,轻量级锁(Lightweight Locking)和偏向锁(Biased Locking)是Java虚拟机(JVM)内部实现的锁优化技术,它们旨在提高多线程环境下锁的性能。这些锁策略是JVM自动管理的,通常不需要开发者手动开启或关闭。

线程里面的工作内存不存在线程安全的问题,共享变量副本是主内存中共享变量的副本,需要通过JMM控制进行save和load






👆在上面这段代码中,线程1修改的stop为true,线程2是能读到的,但是线程3while循环却不停止。


JVM优化导致的重排序。

实验数据

👆这个可以解决问题

👆这个不能组织x在y后执行,不能解决问题。




AQS的实现类当中,公平锁和非公平锁都有实现。













一把锁,获取效率很低

每个hash值都有一把锁。





相关推荐
LaLaLa_OvO18 小时前
spring boot2.0 里的 javax.validation.Constraint 加入 service
java·数据库·spring boot
Solar202518 小时前
构建高可靠性的机械设备企业数据采集系统:架构设计与实践指南
java·大数据·运维·服务器·架构
田里的水稻19 小时前
matlab_绘图线条颜色显示和点的形状显示
开发语言·matlab
慧一居士19 小时前
jdk1.8 及之后的新版本介绍,新特性示例总结
java
CCPC不拿奖不改名19 小时前
python基础:python语言的数据结构+面试习题
开发语言·数据结构·python·面试
Tan385119 小时前
陪读蛙 Read Frog 配置 API 教程|低成本实现高质量翻译
开发语言·机器翻译·自动翻译·api key·tensdaq·陪读蛙·read frog
eybk19 小时前
拖放pdf转化为txt文件多进程多线程合并分词版
java·python·pdf
凑凑的小手办19 小时前
C语言基础(一)
c语言·开发语言
lly20240619 小时前
Lua 循环
开发语言
※※冰馨※※19 小时前
【QT】初始化显示时正常,操作刷新后布局显示问题。
开发语言·c++·windows·qt