面试官问synchronized的底层原理,该怎样回答?

synchronized的关键字在java并发编程中占有相当中要的地位。并且从jdk1.6开始做了很大的改变,其性能也得到了很大的提升,在实际的开发中可以很方便的使用。

同时synchronized关键字也是面试当中经常会遇到的一个问题,那么当面试官问其底层原理时该怎么回答呢?

1、修饰代码块

当synchronized修饰代码块时,javac编译后的字节码会生成对应的monitorenter和monitorexit指令分别对应synchronized同步块的进入和退出(可以通过javap进行反编译查看),当执行 monitorenter 指令时,线程试图获取锁也就是获取 monitor的持有权.当计数器为0则可以成功获取,获取后将锁计数器设为1也就是加1。相应的在执行 monitorexit 指令后,将锁计数器设为0,表明锁被释放。如果获取对象锁失败,那当前线程就要阻塞等待,直到锁被另外一个线程释放为止。

2、修饰方法

而对于synchronized方法而言,javac为其生成了一个ACCSYNCHRONIZED关键字,在JVM进行方法调用时,发现调用的方法被ACCSYNCHRONIZED修饰,则会先尝试获得锁。其获取锁的原理与代码块相同。

以上的回答已经可以满足面试官的要求了,如果要更深入的理解其原理,需要了解其对象锁monitor的结构和原理。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
synchronized关键字是用于实现线程同步的重要关键字。它的底层原理涉及到对象的内部机制。当一个线程进入一个synchronized代码块或方法时,它会尝试获取该对象的内部。如果没有其他线程持有该,那么该线程就会成功获取到并执行代码块或方法。如果有其他线程已经持有了该,那么该线程就会被阻塞,直到其他线程释放了。这样可以确保在同一时刻只有一个线程执行被synchronized修饰的代码块或方法,从而保证了并发安全性。 在底层,Java虚拟机使用了monitor对象来实现synchronized关键字。每个对象都有一个与之关联的monitor对象,用于实现的机制。当线程获取到一个对象的后,它会进入monitor对象的定状态,其他线程将无法进入该对象的synchronized代码块或方法,直到拥有的线程释放了。当线程释放时,它会将的状态设置为可用,然后通知等待的线程有机会获取。这种基于monitor对象的机制确保了线程之间的互斥和同步。 <span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [深入理解synchronized底层原理,一篇文章就够了!](https://blog.csdn.net/qq_36934826/article/details/95978700)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *3* [Synchronized的底层实现原理原理解析,面试必备)](https://blog.csdn.net/weixin_42460087/article/details/126474481)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值