Lock中一些方法介绍使用
一、.getHoldCount(); .getQueueLength();.getWaitQueueLength(condition);
- lock.getHoldCount(); 返回当前保持此锁的线程个数,即调用lock() 方法的次数
- lock.getQueueLength(); 返回正在等待获取此锁的线程个数,例如:有5个线程使用此锁,其中一个线程调用了await() 其他线程都在等待,则该方法返回4.
- lock.getWaitQueueLength(condition); 返回同一个对象调用await线程个数,
二、hasQueuedThread(Thread)、hasQueuedThreads()、hasWaiters(Condition)
- lock.hasQueuedThread(Thread) 返回传入线程是否正在等待lock锁。
- lock.hasQueuedThreads() 返回是否有线程正在等待lock锁
- lock.hasWaiters(Condition) 返回是否有线程正在等待与lock有关的Condition条件
isFair()
- lock.isFair() 查询lock是否为公平锁
- lock.isHeldByCurrentThread() 查询当前线程是否持有该锁
- lock.isLocked() 查询lock是否有线程保持
三、lockInterruptibly、tryLock、tryLock(3, TimeUnit.SECONDS)
- lock.lockInterruptibly() 当线程未被中断,则获得锁,如果已经被中断则出现异常
- lock.tryLock() 其他线程未获取该锁时候返回true并获取lock,其他线程已经调用lock则不获取。
- lock.tryLock(3, TimeUnit.SECONDS); 在规定时间内lock没有被其他线程获取且当前线程没有被打断则获取lock锁
四、awaitUninterruptibly()
- Condition.awaitUninterruptibly() 一直等待知道被打断(Thread.interrupt),使用该方法不会报错,正常的Condition.await() 被打断后会报错
- condition.awaitUntil(Date deadline) 等待到指定时候后自动唤醒
Calendar calendar = Calendar.getInstance();
calendar.add(Calendar.SECOND,10);
condition.awaitUntil(calendar.getTime());