重入锁

条件- 在锁中应用条件允许您实现对流访问管理的控制。锁定条件是java.util.concurrent.locks中的Condition接口的一个对象。使用Condition对象在很多方面类似于使用Objectwait/notify/notifyAll,这些方法在前面的主题之一中进行了讨论。

Lock是锁框架的一个接口,与同步相比,它提供了一种灵活的方法来限制对资源/块的访问。使用多个锁时,释放顺序可以任意,也可以配置。当锁已经被捕获时,也有可能处理这种情况。

ReentrantLock是Lock接口的实现之一, ReentrantLock类。它允许同一个线程在不释放锁的情况下调用 lock 方法,即使它之前已经调用过。

ReentrantLock类除了Lock接口的方法外,还有一个工厂方法newCondition()。这个方法返回一个对象健康)状况,它允许您将当前线程添加到给定对象的等待集中健康)状况.

private final Lock R_LOCK = ReentrantLock();
R_LOCK.lock();
try {
   //some action happens here
} finally {
   R_LOCK.unlock();
}

ReadWriteLock是一个用于创建读/写锁的接口。当系统有很多读取和很少写入时,锁非常有用。

ReentrantReadWriteLock - 用于多线程服务和缓存,与同步块相比具有很好的性能提升。事实上,该类以 2 种互斥模式工作:许多读者并行读取数据,而只有 1 位写入者写入数据。

ReentrantReadWriteLock.ReadLock - 读者的读锁,通过 readWriteLock.readLock() 获得。

ReentrantReadWriteLock.WriteLock - 写入者的写锁,通过 readWriteLock.writeLock() 获得。

同步器

AbstractOwnableSynchronizer是负责构建同步机制的基类。包含一个 getter/setter 来记住和读取可以对您的数据进行操作的独占流。

AbstractQueuedSynchronizer是FutureTask、CountDownLatch、Semaphore、ReentrantLock、ReentrantReadWriteLock中同步机制的基类。在创建依赖于单个原子 int 值的新同步机制时也使用它。

AbstractQueuedLongSynchronizer是AbstractQueuedSynchronizer的变体,它支持原子 long 值。