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

ReentrantLock可重入锁

可重⼊锁,这个锁可以被线程多次重复进⼊进⾏获取操作。
ReentantLock继承接⼝Lock并实现了接⼝中定义的⽅法,除了能完成synchronized所能完成的所有⼯作 外,还提供了诸如可响应中断锁、可轮询锁请求、定时锁等避免多线程死锁的⽅法。
在并发量较⼩的多线程应⽤程序中,ReentrantLock与synchronized性能相差⽆⼏,但在⾼ 并发量的条件下,synchronized性能会迅速下降⼏⼗倍,⽽ReentrantLock的性能却能依然维持⼀个⽔ 准。
因此我们建议在⾼并发量情况下使⽤ReentrantLock。

import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;public class Counter {private final Lock lock = new ReentrantLock();private int count = 0;public void increment() {lock.lock();  // 获取锁try {count++;} finally {lock.unlock();  // 释放锁}}public int getCount() {return count;}public static void main(String[] args) {Counter counter = new Counter();// 创建两个线程,模拟并发访问共享资源Thread t1 = new Thread(() -> {for (int i = 0; i < 1000; i++) {counter.increment();}});Thread t2 = new Thread(() -> {for (int i = 0; i < 1000; i++) {counter.increment();}});t1.start();t2.start();// 等待两个线程执行完毕try {t1.join();t2.join();} catch (InterruptedException e) {e.printStackTrace();}System.out.println("Final count is: " + counter.getCount());}
}
public class Counter {private int count = 0;// 使用 synchronized 关键字修饰方法,确保线程安全public synchronized void increment() {count++;}public int getCount() {return count;}public static void main(String[] args) {Counter counter = new Counter();Thread t1 = new Thread(() -> {for (int i = 0; i < 1000; i++) {counter.increment();}});Thread t2 = new Thread(() -> {for (int i = 0; i < 1000; i++) {counter.increment();}});t1.start();t2.start();try {t1.join();t2.join();} catch (InterruptedException e) {e.printStackTrace();}System.out.println("Final count is: " + counter.getCount());}
}
http://www.lryc.cn/news/375966.html

相关文章:

  • 如何秒杀系统架构设计
  • 深度神经网络——什么是降维?
  • SpringMVC—RequestMapping注解
  • Java线程池基本概念
  • 智能车联网安全发展形势、挑战
  • AWS概述
  • MySQL常见面试题自测
  • c语言回顾-函数递归
  • 消息队列-RabbitMQ-延时队列实现
  • 【热门开源项目推荐】满足不同程序员的需求与关注点
  • 一文理清GO语言日志库实现开发项目中的日志功能(rotatelogs/zap分析)
  • 【Go语言精进之路】构建高效Go程序:了解string实现原理并高效使用
  • HDFS 常见命令
  • 示例:WPF中应用Grid的SharedSizeGroup设置整齐的布局
  • React的form表单自定义校验规则
  • 一种新的一维时间序列信号盲解卷积算法(以旋转机械故障诊断为例,MATLAB环境)
  • 618电商是社区网站入局的好时机吗?
  • 不知道密码,一样能卸载瑞星esm防病毒终端安全防护系统
  • Chromium 开发指南2024 Mac篇-安装和配置depot_tools工具(三)
  • 微信小程序-路由和页面跳转API
  • PWR电源控制
  • 【记录46】【案例】echarts 柱状图
  • Github2024-06-12 开源项目日报 Top10
  • 茶艺师服务师傅小程序APP源码(APP+小程序+公众号+H5)
  • 【正则表达式】入门
  • 制造业为什么需要ERP企业管理软件?
  • JavaScript Prototype
  • Web Works API 和 Promise 的对比和区别
  • jeecg快速启动(附带本地运行可用版本下载)
  • 【PPT教程】一键重置幻灯片背景的方法,新建幻灯片带默认背景