Lock
1、getHoldCount()
查询当前线程保持此锁锁定的个数,也就是调用lock方法的次数
2、int getQueueLength
返回正等待此锁定的线程估计数,例如有5个线程,1个线程首先执行await,那么调用getQueueLength返回4
3、int getWaitQueueLength(Condition condition)
返回等待与次锁定相关的给定条件Condition的线程估计数,例如有5个线程,每个线程都执行了同一个condition对象的await方法,则调用此方法返回5.
4、boolean hasQueuedThreads
查询是否有线程正在等待获取此锁定,lock.hasQueuedThread(thread)
5、boolean hasWaiters(Condition condition)
查询是否有线程正在等待与此锁定有关的condition条件
lock.hasWaiters(condition)线程数是lock.getWaitQueueLength(condition)
6、isFair
判断是否是公平锁
7、boolean isHeldByCurrentThread
查询当前线程是否保持此锁定
8、lockInterruptibly()
如果当前线程未被中断,则获取锁定,如果已经被中断则抛出异常
9、boolean tryLock()
仅在调用时锁定未被另一个线程保持的情况下,才获取 该锁定。
10、boolean tryLock(long timeout,TimeUnit unit)
如果锁定给定等待时间内没有被另一个线程保持,且当前线程未被中断,则获取该锁定,例如:
package com.fyw.thread.lock;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.locks.Condition;
import java.util.concurrent.locks.ReentrantLock;
public class ServiceMethod {
public ReentrantLock lock = new ReentrantLock();
public Condition condition = lock.newCondition();
public void awaitMethod(){
try{
if(lock.try