码迷,mamicode.com
首页 > 编程语言 > 详细

Java并发编程的艺术(十)Lock接口

时间:2019-08-04 10:36:13      阅读:108      评论:0      收藏:0      [点我收藏+]

标签:ide   非阻塞   基本   row   图片   click   超时   扩展性   子类   

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接口

标签:ide   非阻塞   基本   row   图片   click   超时   扩展性   子类   

原文地址:https://www.cnblogs.com/xy80hou/p/11297231.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!