多线程-并发包-lock 锁
lock 接口与 synchronized 关键字的区别
Lock 接口可以尝试非阻塞地获取锁,当前线程尝试获取锁。如果这一时刻锁没有被其他线程获取到,则成功获取并持有锁。
Lock 接口能被中断地获取锁 与 synchronized 不同,获取到锁的线程能够响应中断,当获取到的锁的线程被中断时,中断异常将会被抛出,同时锁会被释放。
Lock 接口在指定的截止时间之前获取锁,如果截止时间到了依旧无法获取锁,则返回。
condition 用法
condition 的功能类似于传统的线程技术中的 Object.wait() 和 Object.notify() 的功能。condition 使用在上锁之后。
Condition condition = lock.newCondition();
condition.await(); // 线程等待
condition.signal(); // 唤醒线程
代码示例
try {
// 开始上锁
res.lock.lock();
if (res.flag) {
// 等待
condition.await();
}
// 相关处理逻辑
// 唤醒其他线程
condition.signal();
} catch (Exception e) {
} finally {
res.lock.unlock();
}