介绍
- java.util.concurrent.locks.Lock
- public interface Lock
- Lock 实现提供比使用 synchronized 更广泛的锁定操作。 它们允许更灵活的结构化,可能具有完全不同的属性,并且可以支持多个相关联的 Condition 对象
- 请注意, Lock 实例只是普通对象,它们本身可以用作 synchronized 语句中的目标。 获取 Lock 实例的监视器锁与调用该实例的任何 lock() 方法没有特定关系。 建议为避免混淆,您不要以这种方式使用Lock实例,除了在自己的实现中
- 所有Lock实现都必须强制执行与内置监视器锁提供的相同内存同步语义
- 成功的lock操作与成功的锁定操作具有相同的内存同步效果
- 成功的unlock操作与成功的解锁操作具有相同的内存同步效果
- 不成功的加锁和解锁操作,以及可重入的加锁/解锁操作,不需要任何内存同步效果
- 锁获取的三种形式(可中断、不可中断和定时)在性能特征、顺序保证或其他实现质量方面可能有所不同。此外,中断正在进行的锁获取的能力在给定的Lock类中可能不可用。因此,实现不需要为所有三种形式的锁获取定义完全相同的保证或语义,也不需要支持中断正在进行的锁获取。
- 实现类
java.util.concurrent.locks.ReentrantLock
java.util.concurrent.locks.ReentrantReadWriteLock.ReadLock
java.util.concurrent.locks.ReentrantReadWriteLock.WriteLock
API
- lock
void lock();
- 获取锁
- 获取失败会阻塞当前线程
- lockInterruptibly
void lockInterruptibly() throws InterruptedException;
- 获取锁
- 获取失败会阻塞当前线程,但可以被中断
- tryLock
boolean tryLock();
- 尝试获取锁,获取成功返回true,获取失败返回false
- 该方法不会阻塞线程
boolean tryLock(long time, TimeUnit unit) throws InterruptedException;
- 如果在给定的等待时间内有空闲并且当前线程没有被中断,则获取锁,返回true
- 如果指定的等待时间过去,则返回值false。如果时间小于或等于零,则该方法不会等待
- unlock
- newCondition
Condition newCondition();
- 返回绑定到此 Lock 实例的新 Condition 实例
posted @
2023-08-30 17:16
流星<。)#)))≦
阅读(
11)
评论()
编辑
收藏
举报