【Lock】加锁解锁

技术【Lock】加锁解锁 【Lock】加锁解锁@Slf4j
public class TestLock {public static void main(String[] args) throws Ex

【锁定】加锁解锁

@Slf4j

公共类TestLock {

公共静态void main(字符串[]参数)引发异常(

重入锁=新的重入锁(假);

string mainThreadName=thread。currentthread().getName();

系统。出去。println('======BEgin=====');

尝试{

新线程(()-{ 0

字符串名称=Thread.currentThread().getName();

锁定。lock();//第一次加锁

System.out.println('1-1 ',' lock。尝试lock());//第二次加锁

系统。出去。println(' 1-2 ',锁定。尝试lock());//第三次加锁

Thread.currentThread().' setName('线程a ');

//未解锁前,剩余锁数量:3

锁定。unlock();//解锁,剩余锁数量:2

锁定。unlock();//解锁,剩余锁数量:1

锁定。unlock();//解锁,剩余锁数量:0

系统。出去。println(name ' lock。getholdcount : '锁。getholdcount());//打印:0

}).start();

新线程(()-{ 0

字符串名称=Thread.currentThread().getName();

尝试{

线。睡眠(200);

} catch(中断异常){ e

e。print stack trace();

}

系统。出去。println(' 2 ',锁定。尝试lock());

Thread.currentThread().' setName('线程b’);

//System.out.println(名称);

如果(锁定。islocked()){ 0

系统。出去。println(name '=1=lock。getholdcount : '锁。getholdcount());

System.out.println(name '解锁');

锁定。unlock();

系统。出去。println(name '=2=lock。getholdcount : '锁。getholdcount());

}

}).start();

新线程(()-{ 0

字符串名称=Thread.currentThread().getName();

尝试{

线。睡眠(200);//睡眠时间与线程B相同,下面lock.unlock()会报IllegalMonitorStateException

//线程。睡眠(400);//lock.unlock()不会报IllegalMonitorStateException

} catch(中断异常){ e

e。print stack trace();

}

系统。出去。println(' 3 ',锁定。尝试lock());

Thread.currentThread().' setName('线程c ');

如果(锁定。islocked()){ 0

//因为睡眠时间相同,所以可能出现的情况:线程B获取到锁但还未解锁,再结合lock.isLocked()源码(任何线程),

//即锁还未被释放,进入判断后lock.unlock()失败,因为不符合:如果当前线程是该锁的持有者

System.out.println(name '解锁');

锁定。unlock();

}

}).start();

}捕获(例外e){ 0

log.error(e.getMessage(),e);

}

系统。出去。println(' mainThreadName '锁。是锁定: '锁。is locked());

系统。出去。println('======END====');

}

}

内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/100421.html

(0)

相关推荐

  • SpringBoot整合Redisson如何实现分布式锁

    技术SpringBoot整合Redisson如何实现分布式锁这篇文章将为大家详细讲解有关SpringBoot整合Redisson如何实现分布式锁,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所

    攻略 2021年11月13日
  • 高级语言程序设计实验4-2

    技术高级语言程序设计实验4-2 高级语言程序设计实验4-2题目描述有 12 人围坐成一圈玩报数游戏,从1号人员开始顺时针报数,报到k的人员被淘汰出局;接着仍沿顺时针方向从被淘汰出局者的下一人员又重新从

    礼包 2021年11月27日
  • 电视开不了机怎么回事,电视开不了机是什么原因

    技术电视开不了机怎么回事,电视开不了机是什么原因电视开不了机有以下几种原因电视开不了机怎么回事,可根据具体原因进行排障解决:1、电源插座无电或电源线没有接好,可插好视讯终端电源插头,保证电源插座电压正常;2、遥控器内没有

    生活 2021年10月30日
  • SpringCloud动态配置变化监控的实例分析

    技术SpringCloud动态配置变化监控的实例分析SpringCloud动态配置变化监控的实例分析,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所

    攻略 2021年10月27日
  • canvas圆形进度动画(canvas绘制圆形代码)

    技术怎么使用Canvas绘制圆形这篇文章主要介绍“怎么使用Canvas绘制圆形”,在日常操作中,相信很多人在怎么使用Canvas绘制圆形问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么使

    攻略 2021年12月21日
  • python中pymsql模块怎么用

    技术python中pymsql模块怎么用这篇文章主要介绍了python中pymsql模块怎么用,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。一、pymys

    攻略 2021年11月24日