ReentrantLock

2020/08/14 77

synchronized

ReentrantLock 也能够实现类似 synchronize 类似的锁定效果,它是在 JDK 5.0 新增的。

private ReentrantLock lock = new ReentrantLock();

public void run() {
    try {
        lock.lock();
        // ...
    } finally {
        lock.unlock();
    }
}

既然有了 synchronize 为何又有 ReentrantLock,它们之间有何异处?

  1. 在使用上,ReentrantLock 需要手动加解锁,synchronize 不需要。
  2. 使用 ReentrantLock,JVM 将花费更少的时间来调度线程,性能更好,并且有更好的扩展性,提供更多的子类。
  3. ReentrantLock 有一个 bool 类型的构造函数,提供公平策略功能。