ReentrantLock是Java并发包java.util.concurrent下的一个类,它实现了Lock接口,是一种可重入的独占锁,在多线程环境中,可以保证同一时刻最多只有一个线程访问共享资源,同时也保证了公平性。
ReentrantLock锁比传统的synchronized关键字的锁具有更高的灵活性,如可以实现公平锁、非公平锁以及定时锁等等。除此之外,ReentrantLock锁还提供了许多有用的方法,例如:
- getHoldCount():返回当前线程对此锁的保持次数;
- getQueueLength():返回正在等待获取此锁的线程估计数;
- hasQueuedThreads():是否有线程正在等待获取此锁;
- isFair():此锁是否为公平锁;
- isHeldByCurrentThread():当前线程是否保持此锁;
- isLocked():此锁是否被任意线程保持。
使用ReentrantLock锁的步骤如下:
1.创建一个ReentrantLock的实例;
2.通过调用lock()方法获取锁;
3.在finally代码块中调用unlock()方法释放锁。
需要注意的是,在使用ReentrantLock锁时,应该保证unlock()方法始终会被执行,这可以通过在try语句块中获取锁,在finally