Java并发-14.Lock工具

2019-05-28 13:20:54 浏览数 (1)

  • Lock接口(和相关实现类)可以来用来实现锁功能。
  • 缺少了隐式释放和获取锁的便捷性,但是多了获取和释放锁的可操作可中断的获取锁,以及超时获取锁等特性。

Lock使用的简单方式:

代码语言:javascript复制
Lock lock = new ReentrantLock();
lock.lock();
try{}
finally{
  lock.unlock();
}

Lock特性:

特性

描述

尝试非阻塞的获取锁

当前线程尝试获取锁,如果这一时刻锁没有被其他线程获取到,获取成功

能被中断的获取锁

获取到锁的线程能响应中断,当获取到锁的线程中断异常会被抛出,同时锁被释放

超时获取锁

在指定的截止时间之前获取锁,如果截止时间到了还没有获取到锁,则返回

Lock的API:

方法

描述

void lock()

当前线程获取锁,获取到锁后,从方法返回

void lockInterruptibly() throws InterrupedException

可中断的获取锁,即在锁的获取中可以中断当前线程

bookean tryLock()

尝试非阻塞的获取锁,调用后立即返回,能获取返回true,否则返回false

boolean tryLock(long time, TimeUnit unit) throws InterruptedException

超时的获取锁,在三种情况下返回1. 当前线程在超时时间内获取到了锁。2. 当前线程在超时时间内被中断3. 超时时间结束,返回false

unlock()

释放锁

Condition newCondition()

获取等待通知组件,只有当前线程获取到了锁,才能调用该组件的wait()方法,调用后,当前线程释放锁

0 人点赞