Java多线程(八)---Java中的锁---Lock接口

2019-02-11  本文已影响175人  brock

1 lock的API

lock是一个借口,它定义了锁获取和释放的基本操作

方法名称 描述
void lock() 获取锁,调用该方法当前线程将会获取锁,当锁获得后,从该方法返回
void lockInterruptibly() throw InterruptedException 可中断地获取锁,和lock()方法不同之处在于该方法会响应中断,即在锁释放中可以中断当前线程
boolean trylock() 尝试非阻塞式的获取锁,调用该方法后立刻返回,若果能够获取则返回true,否则返回false
boolean tryLock(Long time,TimeUnit unit)throws InterruptedException 超时获取锁,当线程在一下三种情况会返回:1. 当前线程在超时时间内获得了锁 2. 当前线程在超时时间内被中断 3. 超时时间结束,返回false
void unLock() 释放锁
Condition newCondition() 获取等待通知组件,该组件和当前的锁绑定,当前线程只有获得了锁,才能调用该组件wait()方法,而调用后,当前线程释放锁。

2 synchronized关键字 VS lock

synchronized关键字

    1. synchronized关键字将会隐式地获取锁
    1. 将锁的获取和释放固化了,也就是先获取再释放。当然,这种方式简化了同步的管理,
    1. 扩展性差

lock

    1. 拥有了锁获取与释放的可操作性
    1. 可中断的获取锁
    1. 超时获取锁。
    1. 尝试非阻塞地获取锁

3 lock简单实用

LockUseCase.java  Lock lock = new ReentrantLock();
lock.lock();
try {
} finally {
    lock.unlock();
}

参考

《java并发编程的艺术》

上一篇下一篇

猜你喜欢

热点阅读