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值都有一把锁。





相关推荐
嵌入小生0072 分钟前
基于Linux系统下的C语言程序错误及常见内存问题调试方法教程(嵌入式-Linux-C语言)
linux·c语言·开发语言·嵌入式·小白·内存管理调试·程序错误调试
假女吖☌6 分钟前
限流算法-redis实现与java实现
java·redis·算法
u0109272717 分钟前
持续集成/持续部署(CI/CD) for Python
jvm·数据库·python
小温冲冲8 分钟前
QPixmap 详解:Qt 中的高效图像处理类
开发语言·图像处理·qt
lixin55655615 分钟前
基于迁移学习的图像风格增强器
java·人工智能·pytorch·python·深度学习·语言模型
面汤放盐19 分钟前
企业权限--系统性方案探究
java·开发语言
what丶k22 分钟前
深度解析Redis LRU与LFU算法:区别、实现与选型
java·redis·后端·缓存
悟能不能悟26 分钟前
java Date转换为string
java·开发语言
菜宾33 分钟前
java-redis面试题
java·开发语言·redis
猿小羽40 分钟前
AI 学习与实战系列:Spring AI + MCP 深度实战——构建标准化、可扩展的智能 Agent 系统
java·spring boot·llm·agent·spring ai·mcp·model context protocol