Java并发编程的艺术Lock接口

Posted xy80hou

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java并发编程的艺术Lock接口相关的知识,希望对你有一定的参考价值。

1、JDK5之后,并发包中新增了Lock接口(以及相关实现类)用来实现锁功能,它提供了与synchronized关键字类似的同步功能,只是在使用时需要显示地获取和释放锁

 

2、synchronized关键字将会隐式地获取锁,但是它将锁的获取和释放固化了,也就是先获取再释放。这种方式简化了同步的管理,但是可扩展性没有Lock接口强。

 

3、Lock的使用:

(1)代码如下:

技术图片
Lock lock = new ReentrantLock();
lock.lock();
try 

 finally 
    lock.unlock();
View Code

(2)不要将获取锁的过程写在try块中,因为如果在获取锁(自定义锁的实现)时发生了异常,异常抛出的同时,也会导致锁无故释放。

(3)在finally块中释放锁,目的是保证在获取到锁之后,最终能够被释放。

 

4、Lock接口提供的synchronized不具备的特性:

(1)boolean tryLock():尝试非阻塞的获取锁,调用方法后立刻返回true或false。

(2)void lockInterruptibly() throws InterruptedException可中断的获取锁,获取锁的线程能够响应中断,抛出中断异常同时释放锁。

(3)boolean tryLock(long time, TimeUnit unit) throws InterruptedException:超时获取锁,在超时时间内获取到锁、在超时时间内被中断或者超时时间结束的情况下返回。

 

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

以上是关于Java并发编程的艺术Lock接口的主要内容,如果未能解决你的问题,请参考以下文章

《Java并发编程的艺术》读后笔记-第五章 Java中的锁

java并发编程的艺术——第五章总结(Lock锁与队列同步器)

《Java并发编程的艺术》--Java中的锁

Java并发编程的艺术(5-10)学习总结

并发编程艺术-锁类型以及底层原理

Java并发编程(06):Lock机制下API用法详解