Lock与Condiition相关的方法
1、int lock.getHoldCount():查询当前线程保持锁定的个数,也就是调用lock()方法的次数
2、int lock.getQueueLength():返回正在等待获取此锁定的线程估计数。
比如:有5个线程,有一个首先执行await()方法,那么调用该方法后返回值为4,说明有4个线程同时在等待lock的释放。
3、int lock.getWaitQueueLength(Condition condition):返回等待与此锁定相关的给定条件condition的线程估计数
比如:有5个线程,每个线程都执行了同一个condition对象的await()方法,则调用该方法是返回的int值为5。
4、boolean lock.hasQueueThread(Thread thread):查询指定的线程是否在等待获取此锁定。
5、boolean lock.hasWaiters(Condition condition):查询是否有线程正在等待与此锁定有关的condition条件。
6、boolean lock.isFair():判断是不是公平锁。
7、boolean lock.isHeldByCurrentThread():查询当前线程是否保持此锁定。
8、boolean lock.isLocked():查询此锁定是否有任意线程锁定。
9、void lock.lockInterruptibly():如果当前线程未被中断,则获取锁定,如果已经被中断则出现异常。
解释说明:lock.lockInterruptibly()方法是用来替换lock.lock(),在获取锁定中,如果遇到interrupt,则出现异常。
而lock()方法,则不会抛出异常,继续执行。
10、boolean lock.tryLock():仅在调用锁定未被另一个线程保持的情况下,才获取该锁定。
11、boolean lock.tryLock(long timeout,TimeUnit unit):如果锁定在给定等待时间内没有被另一个线程保持,且当前线程未被中断,则获取该锁定。
lock.tryLock(3,TimeUnit.SECONDS)
12、void lock.awaitUninterruptibly():用来替换lock.await(),遇到interrupt,正常运行不会抛出异常,而await()方法会抛出异常。
13、void lock.awaitUntil(long timeout):用来替换lock.await(),可以指定多长时间后自动唤醒,在这个时间内,可以被signal()方法唤醒。