文章底部有个人公众号:热爱技术的小郑。主要分享开发知识、学习资料、毕业设计指导等。有兴趣的可以关注一下。为何分享? 踩过的坑没必要让别人在再踩,自己复盘也能加深记忆。利己利人、所谓双赢。
面试官:说一说synchronized与Lock的区别
参考答案:
1、synchronized是Java关键字,在JVM层面实现加锁和解锁;Lock是一个接口,在代码层面实现加锁和解锁。
2、synchronized可以用在代码块上、方法上;Lock只能写在代码里。
3、synchronized在代码执行完或出现异常时自动释放锁;Lock不会自动释放锁,需要在finally中显示释放锁。
4、synchronized会导致线程拿不到锁一直等待;Lock可以设置获取锁失败的超时时间。
5、synchronized无法得知是否获取锁成功;Lock则可以通过tryLock得知加锁是否成功。
6、synchronized锁可重入、不可中断、非公平;Lock锁可重入、可中断、可公平/不公平,并可以细分读写锁以提高效率。