概述
本篇文章是在读《深入理解Java虚拟机(第三版)》的Synchronized章节后学习笔记,对其中Synchronized不可中断进行测试验证,对锁优化的内容进行提炼:1. 理解加锁成本在哪里? 2. 怎样去优化(CAS? ->那怎样CAS?)
Synchronized不可中断
- synchronized关键字经过Javac编译之后,会在同步块的前后分别形成 monitorenter和monitorexit这两个字节码指令
1.1 将下方代码编译
1.2 通过javap -v 查看字节码(javap -v Juc_LockOnThis.class)public class Juc_LockOnThis { public void decrStock(){ //synchronized锁代码块 synchronized (this){ System.out.println("hello world"); } } }

- 根据《Java虚拟机规范》的要求,在执行monitorenter指令时,首先要去尝试获取对象的锁
1.2 如果获取对象锁失败,那当前线程就应当被阻塞等待,直到请求锁定的对象被持有它的线程释放为止(无法中断等待或超时退出) - 被synchronized修饰的同步块对同一条线程来说是可重入的
- 对Synchroniz

本文通过实战解析了Java中`synchronized`关键字的不可中断特性,并探讨了加锁成本、CAS优化及轻量级锁和偏向锁的原理。作者通过代码示例验证了Synchronized的阻塞特性,并介绍了如何通过CAS和自适应自旋优化锁性能。
最低0.47元/天 解锁文章
1171

被折叠的 条评论
为什么被折叠?



