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

相关推荐

  • Elasticsearch-1

    技术Elasticsearch-1 Elasticsearch-11-今日内容初识 ElasticSearch安装 ElasticSearchElasticSearch 核心概念操作 ElasticSe

    礼包 2021年11月24日
  • 解决texlive化学式转换镜像经常偶发性进程堆积导致卡顿问题

    技术解决texlive化学式转换镜像经常偶发性进程堆积导致卡顿问题 解决texlive化学式转换镜像经常偶发性进程堆积导致卡顿问题前言
    之前在 使用Python定时清理运行超时的pdflatex僵尸进程

    礼包 2021年12月2日
  • Laravel使用多数据库的方法是什么

    技术Laravel使用多数据库的方法是什么这篇文章主要讲解了“Laravel使用多数据库的方法是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Laravel使用多数据

    攻略 2021年10月29日
  • 抖音刷赞软件,实惠的刷赞软件

    技术抖音刷赞软件,实惠的刷赞软件免费刷抖音赞软件,抖音怎么刷点赞上热门?关于抖音刷赞、抖音怎么刷赞等相关问题,于是去网上输入”抖音刷赞”,哇~不搜不知道一搜吓一跳,网上出现:抖音刷赞|抖音怎么刷赞|抖音刷赞上热门|抖音快

    测评 2021年10月19日
  • 小2寸照片尺寸是多少,小2寸照片的尺寸是多少?

    技术小2寸照片尺寸是多少,小2寸照片的尺寸是多少?1寸 2小2寸照片尺寸是多少。5*3。5cm 413*295 身份证照 3。3*2。2 390*260 2寸 3。5*5。3cm 626*413【需要尺寸】 2寸(护照)

    生活 2021年10月20日
  • MySQL5存储过程怎么用

    技术MySQL5存储过程怎么用这篇文章主要介绍了MySQL5存储过程怎么用,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。1、下载、安装,不用多说(偶喜欢非

    攻略 2021年11月2日