完全理解synchronized关键字的深入用法,对象、类、字符串锁、字节码

synchronized关键字的作用

Java中的关键字synchronized的作用应该都明白,在并发编程中经常使用,是JVM级的锁实现,这里就不做过多说明。它的用法是提供一个key来使代码块互斥的被多个线程执行。笔者这里的说法可能和常规说法有点不同。因为我用了一个key的概念。笔者认为,它的底层实现就是一个key。哪个线程竞争到了key,就能开锁进入被锁住的代码块中执行,否则将无限等待下去。

如何理解synchronized的key

我们知道使用synchronized时,可以有类锁、对象锁、静态方法块锁、对象方法锁。这些情况是真的多,初看还真有点复杂。但今天我们不从这个角度来理解,我们从我这里强调用key的思路来理解。

//伪代码,
//只要在同一个JVM中,下面这段代码无论在哪里执行(同一个类中、不同类中、不同jar包)
//只要key相同(这里的相同,耐人寻味哈),那么必定互斥的执行。
//这段注释便是synchronized的本质。
synchronized(key){
   
   //锁住代码块
}

synchronized的本质

只要在同一个JVM中,上面这段代码无论在哪里执行(同一个类中、不同类中、不同jar包)
只要key相同(这里的相同,耐人寻味哈),那么必定互斥的执行。
这便是synchronized的本质。

如何理解key相同

内存地址相同。(这里对JMM和JVM的分布还不是特别的清楚,查了资料后再补充)

将key与Java写法相对应

key=this的情况

public synchronized void fun1(){
   }
 public void fun2(){
   
    synchronized(this){
   
        
    }
}

字节码

@groovyx.ast.bytecode.Bytecode
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值