java.util.concurrent.locks.ReentrantLock
---恢复内容开始---
public class ReentrantLock extends Object implements Lock, Serializable
一个可重入的互斥锁...
使用公平锁的被多线程访问的程序可能比那些使用默认设置的程序显出更低的吞吐性能(也就是速度慢,通常慢很多),但是在时间上和“获得锁”相比差距要小一些,并且能保证不会产生饥饿现象。
然而需要注意的是锁的公平性并不能保证线程调度的公平性。也就是说,当其他激活状态的线程没有在运行并且当前没有拿到锁时,一个使用公平锁的线程可能多次成功获得锁。还要注意的是不计时的tryLock()
方法并不遵循公平性设置,即使有其他线程在等待,只要锁是可用的tryLock()就会成功。
建议在实际操作中总在调用lock()方法后面跟一个try{}代码块,典型的先后结构如下:
class X { private final ReentrantLock lock = new ReentrantLock(); // ... public void m() { lock.lock(); // block until condition holds try { // ... method body } finally { lock.unlock() } } }
除了实现Lock接口外,该类还定义了isLocked和getLockQueueLength方法,还有一些相关的protected访问修饰的方法,可能对锁的监测和监控有用。