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





相关推荐
RemainderTime几秒前
从零搭建Spring Boot3.x生产级单体脚手架项目(JDK17 + Nacos + JWT + Docker)
java·spring boot·架构
黯叶2 分钟前
基于 Docker+Docker-Compose 的 SpringBoot 项目标准化部署(外置 application-prod.yml 配置方案)
java·spring boot·redis·docker
say_fall3 分钟前
泛型编程基石:C++ 模板从入门到熟练
java·开发语言·c++·编辑器·visual studio
代码笔耕5 分钟前
写了几年 Java,我发现很多人其实一直在用“高级 C 语言”写代码
java·后端·架构
谷哥的小弟6 分钟前
SQLite MCP服务器安装以及客户端连接配置
服务器·数据库·人工智能·sqlite·大模型·源码·mcp
txinyu的博客9 分钟前
结合游戏场景解析UDP可靠性问题
java·开发语言·c++·网络协议·游戏·udp
一路向北North10 分钟前
springboot基础(85): validator验证器
java·spring boot·后端
djimon11 分钟前
06年老电脑复活Ubuntu14.04配置Python网站爬自动化
开发语言·python·自动化
雾岛听蓝15 分钟前
探索C++继承机制
开发语言·c++
1.14(java)21 分钟前
掌握数据库约束:确保数据精准可靠
java·数据库·mysql·数据库约束