重入锁
![](https://cdn.codegym.cc/images/article/ee2cd199-b06a-4310-93c0-67f113b8ba93/1024.jpeg)
条件- 在锁中应用条件允许您实现对流访问管理的控制。锁定条件是java.util.concurrent.locks中的Condition接口的一个对象。使用Condition对象在很多方面类似于使用Object类wait/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() 获得。
同步器
![](https://cdn.codegym.cc/images/article/cb9ae844-7dce-459b-b8af-55a1830c5fb1/512.jpeg)
AbstractOwnableSynchronizer是负责构建同步机制的基类。包含一个 getter/setter 来记住和读取可以对您的数据进行操作的独占流。
AbstractQueuedSynchronizer是FutureTask、CountDownLatch、Semaphore、ReentrantLock、ReentrantReadWriteLock中同步机制的基类。在创建依赖于单个原子 int 值的新同步机制时也使用它。
AbstractQueuedLongSynchronizer是AbstractQueuedSynchronizer的变体,它支持原子 long 值。