java面试中有哪些锁?Java锁面试题有哪些?

经历过java面试的小伙伴都知道,java面试是考核你对java知识的掌握程度,并且会考核全部java内容,因此我们想顺利用过java面试,还是需要用心学,那java面试中有哪些锁?下面来我们就来给大家讲解一下。

Java锁有以下几种:

1.公平锁 / 非公平锁

2.可重入锁 / 不可重入锁

3.独享锁 / 共享锁

4.互斥锁 / 读写锁

5.乐观锁 / 悲观锁

6.分段锁

7.偏向锁 / 轻量级锁 / 重量级锁

8.自旋锁

Java锁面试题有哪些?

1.乐观锁和悲观锁的理解及如何实现,有哪些实现方式?

乐观锁,每次操作时不加锁而是假设没有冲突而去完成某项操作,如果因为冲突失败就重试,直到成功为止;

悲观锁是会导致其它所有需要锁的线程挂起,等待持有锁的线程释放锁。

乐观锁可以使用volatile+CAS原语实现,带参数版本来避免ABA问题,在读取和替换的时候进行判定版本是否一致;

悲观锁可以使用synchronize的以及Lock;

2.Synchronized有哪些缺点?

只有一个condition与锁相关联,这个condition是什么?就是synchronized对针对的对象锁。

synchronized无法中断一个正在等待获得锁的线程,也即多线程竞争一个锁时,其余未得到锁的线程只能不停的尝试获得锁,而不能中断。这种情况对于大量的竞争线程会造成性能的下降等后果。

3.我们面对ReentrantLock和synchronized改如何选择?

Synchronized相比Lock,为许多开发人员所熟悉,并且简洁紧凑,如果现有程序已经使用了内置锁,那么尽量保持代码风格统一,尽量不引入Lock,避免两种机制混用,容易令人困惑,也容易发生错误。在Synchronized无法满足需求的情况下,Lock可以作为一种高级工具,这些功能包括“可定时的、可轮询的与可中断的锁获取操作,公平队列,以及非块结构的锁”否则还是优先使用Synchronized。

最后,未来更可能提升Synchronized而不是Lock的性能,因为Synchronized是JVM的内置属性,他能执行一些优化,例如对线程封闭的锁对象的锁消除优化,通过增加锁的粒度来消除内置锁的同步,而如果基于类库的锁来实现这些功能,则可能性不大。

4.Lock锁和synchronized锁的区别是什么?

Lock锁是对象,而synchronized是java关键字;

Lock锁需要手动加锁释放锁,synchronized的该操作是全自动的。对于异常前者需要手动释放锁,不然容易导致死锁。而后者由jvm自动管理。

Lock锁的属性可以配置,而synchronized只能是可重入的、非公平的、不可中断的。

在实现原理上synchronized主要是基于对象的monitor。而Lock的实现是java层面的,基础是AQS;

Java锁是java重要知识点,也是java面试中必考的问题,如果我们想要顺利通过java面试,关于java锁相关知识点以及面试题一定要多看多做,加深印象!最后大家如果想要了解更多Java面试题知识,敬请关注奇Q工具网。

推荐阅读:

json序列化和反序列化方法是什么?为什么需要序列化与反序列化?

javabean原理是什么?javabean怎么使用?

java数组求和方法是什么?java数组如何计算最大值?