实战总结,轻松解决synchronized的面试题

前言

我在猫眼二面的时候面试官问了我一些synchronized的一些面试题,下面跟大家分享一下问题和我的答案,希望对大家有帮助,如果有什么不足的地方,也可以留言我们一起讨论。

问题

问题1:synchronized修饰静态方法和非静态方法有什么区别?

答:如果是非静态方法那么锁的对象本身,如果方法是静态方法那么锁的是类。因为在jvm加载类的时候,类的常量以及静态成员和方法会一起加载,所以当我们在静态方法上加synchronized时,锁的资源是类,所以即使new了两个对象,调用的分别的静态方法也会阻塞。如果还不理解的话,下次我详细举例。

问题2:描述一下synchronized升级的过程

答:synchronized刚开始是一个无锁的状态,当有线程拿到锁时,会升级为偏向锁,把这个线程会做一个标记,当这个线程下次再执行这个方法时,不用去抢锁,当有多个线程同时执行方法时,会从偏向锁升级为轻量级锁,底层是CAS,也就是自旋锁,拿不到锁的线程会进行自旋,当有线程自旋了10次还没拿到锁,那么锁就会升级为重量级锁等待的线程会被操作系统挂起,直到持有锁的线程释放完资源。

问题3:synchronized的轻量级锁和重量级锁相比,轻量体现在哪?
答:自旋锁的优点就是当线程拿不到锁时,通过进行自旋避免被操作系统挂起,避免了上下文切换,但是如果大量的线程拿不到锁而自旋,会非常占用CPU资源,所以当有线程自旋了10次还没拿到锁,那么锁就会升级为重量级锁的原因。

总结

这就是上次猫眼二面有关synchronized的面试题,把以上问题理解,synchronized的问题基本上也就没问题了。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值