本文最后更新于:2020年9月17日 下午

Java并发系列(十六)-Lock接口

1、什么是Lock接口

Lock接口是用来实现synchronized锁功能的。

它需要在使用的时候显示地获取和释放锁。

2、Lock接口的优缺点

优点:

    1.锁获取与释放的可操作性性
    2.可中断的获取锁
    3.超时获取锁
    ...等新特性

缺点:

    缺少了隐式获取释放锁的便捷性。
Lock lock = new ReetrantLock();
lock.lock();
try{
}finally {
    lock.unlock();
}

3、为什么不在try块中获取锁

获取锁时可能会发生异常(自定义锁),异常抛出的同时,也会导致锁的无故释放。

4、Lock特征

1.尝试非阻塞地获取锁

    没有获取锁的时候可以去做其他事,
    当锁没有其他线程获取时,则成功获取并持有锁。

2.能被中断地获取锁

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

3.超时获取锁

    在指定截止时间获取锁,如果超时则返回

5、Lock常用API

1.void lock()

    获取锁,获取到锁后从该方法返回。

2.void lcokInterruptibly() throws InterruptedException

    可中断地获取锁,在锁的获取过程中可中断线程,这个方法可以响应中断。

3、boolean tryLock

    尝试非阻塞的获取锁,调用方法后立即返回,获取到了就返回true,否则返回false。

4、boolean tryLock(long time.TimeUnit unit) throws InterruptedExceptions

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

5.void unlock()

    释放锁

6、Condition new Condition()

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

6、Lock接口的如何使用

Lock接口的实现基本都是通过聚合一个同步器的子类来完成线程的访问控制的。


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!博客中转载文章会注明出处,若有版权问题,请及时与我联系!谢谢!

计算机网络系列(九)-应用层(二) 上一篇
Java并发系列(十五)-Java内存模型综述 下一篇