【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)

相关推荐

  • 如何在几分钟内实现Kubernetes入口控制器配置

    技术如何在几分钟内实现Kubernetes入口控制器配置本篇文章给大家分享的是有关如何在几分钟内实现Kubernetes入口控制器配置,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说

    攻略 2021年11月24日
  • 吸热反应和放热反应,有哪些化学反应是吸热/放热反应

    技术吸热反应和放热反应,有哪些化学反应是吸热/放热反应自热火锅吸热反应和放热反应、自热米饭想必许多人都吃过,价格不贵又方便快捷,户外旅行的必备,大学和朋友们一块出去野营,男生为女性朋友们用这送温暖,还可以取得附加分。自热

    生活 2021年10月28日
  • 高铁一等座和二等座的区别,一等座二等座是高铁还是火车

    技术高铁一等座和二等座的区别,一等座二等座是高铁还是火车高铁一等座和二等座的区别主要是在舒适性、设备配置方面,还有票价方面不同高铁一等座和二等座的区别。1、一等座和二等座首先是坐席不同,高铁一等座四个人一排,每座下面都有

    生活 2021年10月29日
  • Ajax技术中有哪些局限性

    技术Ajax技术中有哪些局限性这篇文章主要讲解了“Ajax技术中有哪些局限性”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Ajax技术中有哪些局限性”吧!  Ajax技术

    攻略 2021年11月13日
  • 怎么实现jenkins邮件配置

    技术怎么实现jenkins邮件配置本篇文章为大家展示了怎么实现jenkins邮件配置,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。Jenkins搭建完成后,接下来就要做一些配置工

    攻略 2021年11月17日
  • Win10系统下如何将VSCode配置到右键菜单中

    技术Win10系统下如何将VSCode配置到右键菜单中这篇文章将为大家详细讲解有关Win10系统下如何将VSCode配置到右键菜单中,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。教程新

    攻略 2021年11月12日