ReentrantLock中一些方法介绍使用

本文详细介绍了Lock接口中的方法,如getHoldCount()、getQueueLength()、getWaitQueueLength()等,用于监控锁的状态和线程等待情况。同时,讲解了hasQueuedThread()、isFair()等方法,帮助判断锁的持有和公平性。此外,还讨论了lockInterruptibly()、tryLock()以及tryLock(时间, 单位)等获取锁的不同策略,以及Condition的awaitUninterruptibly()和awaitUntil()在等待唤醒上的应用。这些内容对于理解和使用并发编程中的锁机制至关重要。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Lock中一些方法介绍使用

一、.getHoldCount(); .getQueueLength();.getWaitQueueLength(condition);

  1. lock.getHoldCount(); 返回当前保持此锁的线程个数,即调用lock() 方法的次数
  2. lock.getQueueLength(); 返回正在等待获取此锁的线程个数,例如:有5个线程使用此锁,其中一个线程调用了await() 其他线程都在等待,则该方法返回4.
  3. lock.getWaitQueueLength(condition); 返回同一个对象调用await线程个数,

二、hasQueuedThread(Thread)、hasQueuedThreads()、hasWaiters(Condition)

  1. lock.hasQueuedThread(Thread) 返回传入线程是否正在等待lock锁。
  2. lock.hasQueuedThreads() 返回是否有线程正在等待lock锁
  3. lock.hasWaiters(Condition) 返回是否有线程正在等待与lock有关的Condition条件

isFair()

  1. lock.isFair() 查询lock是否为公平锁
  2. lock.isHeldByCurrentThread() 查询当前线程是否持有该锁
  3. lock.isLocked() 查询lock是否有线程保持

三、lockInterruptibly、tryLock、tryLock(3, TimeUnit.SECONDS)

  1. lock.lockInterruptibly() 当线程未被中断,则获得锁,如果已经被中断则出现异常
  2. lock.tryLock() 其他线程未获取该锁时候返回true并获取lock,其他线程已经调用lock则不获取。
  3. lock.tryLock(3, TimeUnit.SECONDS); 在规定时间内lock没有被其他线程获取且当前线程没有被打断则获取lock锁

四、awaitUninterruptibly()

  1. Condition.awaitUninterruptibly() 一直等待知道被打断(Thread.interrupt),使用该方法不会报错,正常的Condition.await() 被打断后会报错
  2. condition.awaitUntil(Date deadline) 等待到指定时候后自动唤醒
	// 10s 后自动被唤醒
	Calendar calendar = Calendar.getInstance();
	calendar.add(Calendar.SECOND,10);
	condition.awaitUntil(calendar.getTime());
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值