一位3年工作经验的小伙伴,去一家互联网公司面试,结果被面试官怼了。面试官说:”这么简单的问题你都不知道?没法聊了,回去等通知吧“。然后,回来跟我是一阵诉苦。
另外,我花了1个多星期,准备了一份500页的PDF面试题解析配套文档,想获取的小伙伴可以扫描文章底部二维码免费领取!
(附赠10万字大厂内部面试资料!)
1、可重入锁的官方定义
可重入是多线程并发编程里面一个比较重要的概念。简单来说,就是在运行的某个方法或代码片段,因为抢占资源或者中断等原因导致方法或者代码片段的运行中断,等待中断程序执行结束后,重新进入到这个方法或者代码片段中运行,并且运行结果不会受到影响,那么这个方法或者代码片段就是可重入的。
而可重入锁,简单来说就是一个线程如果抢占到了互斥锁资源,在锁释放之前再去竞争同一把锁的时候,不需要等待,只需要记录重入次数。
在多线程并发编程里面,绝大部分锁都是可重入的,比如 synchronized、ReentrantLock 等,但是也有不支持重入的锁,比如 JDK8 里面提供的读写锁StampedLock。
2、可重入锁的应用场景
来看这么一段代码:
public static synchronized void lock1(){ //Thread X 获取到了lock1()中的synchronized锁 //再次调用另外一个加同步锁的lock2()方法 lock2(); } public static synchronized void lock2(){ //To do }
锁的可重入性,主要解决的问题是避免线程死锁的问题。因为一个已经获得同步锁 X 的线程,在释放锁 X 之前再去竞争锁 X 的时候,相当于会出现自己要等待自己释放锁,这很显然是无法成立的。
关于这个问题,其实是考察应聘者的基础知识。互联网大厂对基础的考察会特别深,各位想进互联网的小伙伴还是需要在工作之外去多花一点时间研究。对于 3 年工作经验的小伙伴,也应该要开始关注这一类问题了。
最后,我把之前分享的视频全部整理成了文字,想获取的小伙伴可以扫描文章底部二维码拿!希望能够以此来提高各位粉丝的通过率。