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





相关推荐
叁散2 分钟前
实验项目4 光电式传感器原理与应用(基于Matlab)
开发语言·matlab
先做个垃圾出来………2 分钟前
Python try-except-else 语句详解
开发语言·python
PwnGuo2 分钟前
Android逆向:在 Unidbg 中解决 native 函数内调用 Java 方法的报错
android·java·python
进击的小头4 分钟前
为什么C语言也需要设计模式
c语言·开发语言·设计模式
输出输入11 分钟前
IJ IDEA 目录结构
java
Kratzdisteln15 分钟前
【1902】预先生成完整的树状PPT结构
java·前端·powerpoint
Dontla16 分钟前
Database Schema Introduction (structure of data, NoSQL schema)
数据库·nosql
2401_8322981018 分钟前
存算分离2.0,阿里云EMR Serverless破解数据处理瓶颈
数据库
Sylvia-girl19 分钟前
Lambda表达式
java·开发语言
softshow102621 分钟前
html2canvas + jspdf实现页面导出成pdf
开发语言·javascript·pdf