重温 JAVA -- synchronized 终

本文详细介绍了JAVA中的synchronized关键字,包括其在类方法、对象方法、代码块的使用,以及对象头、锁升级(偏向锁、轻量锁、重量锁)的概念和执行流程,阐述了synchronized的底层原理及其优化策略。
摘要由CSDN通过智能技术生成

1、基本介绍

synchronized 关键字用于实现多线程之间的同步操作。
synchronized 可用于修饰 类方法, 对象方法, 代码块
使用 syncronized 时,需要有监视器。当修饰 类方法时, 监视器为该类; 当修饰 对象方法, 监视器为该对象; 当修饰 代码块, 需要手动传入监视器

1.1、类方法

示例代码

public class SynchronizedTest {
   
    public synchronized static void classMethod() {
   
    }

    public static void commonClassMethod() {
   
    }
}

反编译

  public static synchronized void classMethod();
    descriptor: ()V
    flags: ACC_PUBLIC, ACC_STATIC, ACC_SYNCHRONIZED
    Code:
      stack=0, locals=0, args_size=0
         0: return
      LineNumberTable:
        line 12: 0

  public static void commonClassMethod();
    descriptor: ()V
    flags: ACC_PUBLIC, ACC_STATIC
    Code:
      stack=0, locals=0, args_size=0
         0: return
      LineNumberTable:
        line 15: 0

从反编译角度来看,加了 synchronized 关键字的,flags 多了 ACC_SYNCHRONIZED

1.2、对象方法

示例代码

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值