全国旗舰校区

不同学习城市 同样授课品质

北京

深圳

上海

广州

郑州

大连

武汉

成都

西安

杭州

青岛

重庆

长沙

哈尔滨

南京

太原

沈阳

合肥

贵阳

济南

下一个校区
就在你家门口
+
当前位置:首页  >  应聘面试  >  Java面试题

介绍一下ReentrantLock

发布时间:2022-11-19 17:27:00
发布人:wjy

  一. ReentrantLock简介

  ReentantLock继承接口Lock并实现了接口中定义的方法,他是一种可重入锁,除了能完成synchronized所能完成的所有工作外,还提供了诸如可响应中断锁、可轮询锁请求、定时锁等避免多线程死锁的方法。

  二. Lock接口的主要方法

  1. void lock(): 执行此方法时,如果锁处于空闲状态,当前线程将获取到锁。相反,如果锁已经被其他线程持有,将禁用当前线程,直到当前线程获取到锁。

  2. boolean tryLock():如果锁可用,则获取锁,并立即返回 true,否则返回 false. 该方法和 lock()的区别在于,tryLock()只是"试图"获取锁, 如果锁不可用, 不会导致当前线程被禁用,当前线程仍然继续往下执行代码。而 lock()方法则是一定要获取到锁,如果锁不可用,就一直等待,在未获得锁之前,当前线程并不继续向下执行;

  3. void unlock():执行此方法时, 当前线程将释放持有的锁. 锁只能由持有者释放, 如果线程并不持有锁, 却执行该方法, 可能导致异常的发生;

介绍一下ReentrantLock

  4. Condition newCondition():条件对象,获取等待通知组件。该组件和当前的锁绑定, 当前线程只有获取了锁,才能调用该组件的 await()方法,而调用后,当前线程将缩放锁;

  5. getHoldCount() :查询当前线程保持此锁的次数,也就是执行此线程执行lock方法的次数;

  6. getQueueLength():返回正等待获取此锁的线程估计数,比如启动10个线程,1个线程获得锁,此时返回的是9;

  7. getWaitQueueLength:(Condition condition)返回等待与此锁相关的给定条件的线程估计数。比如 10 个线程,用同一个condition对象,并且此时这10个线程都执行了condition对象的await方法,那么此时执行此方法返回10;

  8. hasWaiters(Condition condition):查询是否有线程等待与此锁有关的给定条件(condition),对于指定contidion对象,有多少线程执行了condition.await方法;

  9. hasQueuedThread(Thread thread):查询给定线程是否等待获取此锁;

  10. hasQueuedThreads():是否有线程等待此锁;

  11. isFair():该锁是否公平锁;

  12. isHeldByCurrentThread(): 当前线程是否保持锁锁定,线程的执行lock方法的前后分别是false和 true;

  13. isLock():此锁是否有任意线程占用;

  14. lockInterruptibly():如果当前线程未被中断,获取锁;

  15. tryLock():尝试获得锁,仅在调用时锁未被线程占用,获得锁;

  16. tryLock(long timeout TimeUnit unit):如果锁在给定等待时间内没有被另一个线程保持,则获取该锁。

相关文章

华为外包java面试题-Java实现单链表的逆序

2023-07-25

Java程序员面试题

2023-07-21

Java面试题及答案

2023-07-20

什么是Java中的线程?如何创建和启动线程?

2023-07-18

Java中的异常处理机制是什么?请解释try-catch-finally块的作用

2023-07-18

面向对象编程的特征是什么?请解释每个特征

2023-07-18
在线咨询 免费试学 教程领取