当前位置: 首页 > news >正文

JAVA基础:Lock锁

目录

前言

Lock的使用过程


前言

因为synchronized锁在使用时存在着一定的不足,所以在jdk1.5时,提供了一个java 并发 工具包。里面包含了许多与多线程操作相关的工具类,其中就包含了Lock系列

Lock的使用过程

Lock本身是一个接口,我们实际应用时使用其对应的子类ReentrantLock

创建锁对象。 如果多个线程需要争抢一把锁,就创建一个锁对象。 需要多个锁,就创建多个锁对象

调用lock对象的lock()尝试争抢锁。 如果抢不到锁,线程进入等待状态。

调用lock对象的unlock(),释放锁。 其他等待锁的线程才能继续争抢。

使用tryLock(10,TimeUnit.SECONDS)方法可以尝试在指定的时间内获得锁。返回boolean

如果指定时间没有获得锁就向下执行其他的代码

static final Lock lock = new ReentrantLock();
public static void t1(){lock.lock();for (int i = 1; i <= 10; i++) {System.out.println(Thread.currentThread().getName() + " : " + i);}lock.unlock();
}

在使用lock锁,建议将获得锁的代码写在try中,将释放锁的代码写在finally中确保无论操作是否成功还是是否,都能释放锁。

否则如果代码在执行过程中发生异常程序中断就不会释放锁了,其他线程就无法执行代码

try{lock.lock();...
}finally{lock.unlock();
}

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • imo云办公室 Imo_DownLoadUI.php 任意文件下载漏洞复现
  • Amesim-帮助文件翻译与总结-重要元件之firstorderlag
  • 小琳AI课堂:确保大语言模型安全的八大策略--从数据隐私到用户教育
  • Effective Java 学习笔记 方法签名设计
  • 使用python用递归实现汉诺塔算法
  • 三种springboot启动时加载方式
  • 蓝桥杯【物联网】零基础到国奖之路:十. OLED
  • 花朵识别系统Python+卷积神经网络算法+人工智能+深度学习+计算机课设项目+TensorFlow+模型训练
  • 基于无人机影像的可见光单木分割数据集-json格式
  • [Python]二、Python基础数据科学库(1)
  • 2024最新!!!iOS高级面试题,全!(二)
  • Golang | Leetcode Golang题解之第416题分割等和子集
  • Linux系统(Ubuntu)(下载篇)
  • C++11标准模板(STL)- 常用数学函数 - 计算e的给定幂 (ex)(std::exp, std::expf, std::expl)
  • 【Oracle】ORA-02292: integrity constraint
  • php的引用
  • 0基础学习移动端适配
  • Android Studio:GIT提交项目到远程仓库
  • Angular js 常用指令ng-if、ng-class、ng-option、ng-value、ng-click是如何使用的?
  • Js基础知识(一) - 变量
  • maven工程打包jar以及java jar命令的classpath使用
  • MySQL Access denied for user 'root'@'localhost' 解决方法
  • mysql中InnoDB引擎中页的概念
  • RxJS: 简单入门
  • spring cloud gateway 源码解析(4)跨域问题处理
  • Vue 2.3、2.4 知识点小结
  • 从伪并行的 Python 多线程说起
  • 搭建gitbook 和 访问权限认证
  • 怎样选择前端框架
  • linux 淘宝开源监控工具tsar
  • ​1:1公有云能力整体输出,腾讯云“七剑”下云端
  • # .NET Framework中使用命名管道进行进程间通信
  • #{}和${}的区别?
  • (delphi11最新学习资料) Object Pascal 学习笔记---第13章第1节 (全局数据、栈和堆)
  • (Java实习生)每日10道面试题打卡——JavaWeb篇
  • (Redis使用系列) SpringBoot中Redis的RedisConfig 二
  • (分享)一个图片添加水印的小demo的页面,可自定义样式
  • (附源码)springboot掌上博客系统 毕业设计063131
  • (利用IDEA+Maven)定制属于自己的jar包
  • (十六)串口UART
  • (一)Thymeleaf用法——Thymeleaf简介
  • (一)utf8mb4_general_ci 和 utf8mb4_unicode_ci 适用排序和比较规则场景
  • (转)linux自定义开机启动服务和chkconfig使用方法
  • .NET 2.0中新增的一些TryGet,TryParse等方法
  • .NET COER+CONSUL微服务项目在CENTOS环境下的部署实践
  • .net core 控制台应用程序读取配置文件app.config
  • .net FrameWork简介,数组,枚举
  • .net mvc actionresult 返回字符串_.NET架构师知识普及
  • .NET 快速重构概要1
  • .NET中的Event与Delegates,从Publisher到Subscriber的衔接!
  • @AliasFor 使用
  • [ 代码审计篇 ] 代码审计案例详解(一) SQL注入代码审计案例
  • [000-01-022].第06节:RabbitMQ中的交换机介绍
  • [ACP云计算]组件介绍
  • [C#]使用C#部署yolov8的目标检测tensorrt模型