Synchronized锁优化进阶学习

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

概述

   本篇文章是在读《深入理解Java虚拟机(第三版)》的Synchronized章节后学习笔记,对其中Synchronized不可中断进行测试验证,对锁优化的内容进行提炼:1. 理解加锁成本在哪里? 2. 怎样去优化(CAS? ->那怎样CAS?)

Synchronized不可中断

  1. synchronized关键字经过Javac编译之后,会在同步块的前后分别形成 monitorentermonitorexit这两个字节码指令
    1.1 将下方代码编译
    public class Juc_LockOnThis {
        public void decrStock(){
            //synchronized锁代码块
            synchronized (this){
                System.out.println("hello world");
            }
        }
    }
    
    1.2 通过javap -v 查看字节码(javap -v Juc_LockOnThis.class)
    在这里插入图片描述
  2. 根据《Java虚拟机规范》的要求,在执行monitorenter指令时,首先要去尝试获取对象的锁
    1.2 如果获取对象锁失败,那当前线程就应当被阻塞等待,直到请求锁定的对象被持有它的线程释放为止(无法中断等待或超时退出
  3. 被synchronized修饰的同步块对同一条线程来说是可重入
  4. 对Synchroniz
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值