前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布

Lock锁

作者头像
JavaEdge
发布2022-11-29 08:56:11
4410
发布2022-11-29 08:56:11
举报
文章被收录于专栏:JavaEdgeJavaEdge

Lock接口

锁是用来控制多个线程访问共享资源的方式 一般来说,锁能够防止多个线程同时访问共享资源(但也有的锁可以允许多个线程访问共享资源,比如读写锁) 在Lock接口出现前,靠synchronized实现锁功能,但是在Java5之后并发包中新增了Lock接口(及其相关实现类)来实现锁功能.

它提供了与synchronized类似的同步功能,只是Lock需要显示的获取和释放锁,虽然缺少了隐式获取释放锁的便捷性,但是拥有了获取与释放锁的可操作性,可中断的获取锁以及超时获取等多种synchronized不具备的同步特性

大体上使用synchronized代码量更少,出错可能性低,因此通常只有在处理特殊问题时,才使用显式的Lock对象.

使用也很简单,如下

代码语言:javascript
复制
Lock lock = new ReentrantLock();
lock.lock();
try {
} finally {
    lock.unlock();
}
  • 在finally块中释放锁,是为保证在获取到锁之后,最终能够被释放。这也是比synchronized好的地方,即使某些事务失败了,finally字句的unlock()将系统维护在正确状态 不要将获取锁的过程写在try块中,因为如果在获取锁(自定义锁的实现)时发生了异常,异常抛出的同时,也会导致锁无故释放。

Lock接口提供的synchronized所不具备的主要特性如下表

这里写图片描述
这里写图片描述

Lock是一个接口,它定义了锁获取和释放的基本操作,API如表

这里写图片描述
这里写图片描述

这里只是简单介绍一下Lock接口的API Lock接口的实现基本都是通过聚合了一个同步器的子类来完成线程访问控制的

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017-12-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Lock接口
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档