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

相关推荐

  • Xsheel使用小技巧有哪些

    技术Xsheel使用小技巧有哪些这篇文章将为大家详细讲解有关Xsheel使用小技巧有哪些,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。❝ 工作中无可避免的会使用到Xsh

    攻略 2021年11月9日
  • mssql邮件无法初始化(winxp命令启动sql)

    技术当MSSQL无法调用Xp_CmdShell时该怎么办这期内容当中小编将会给大家带来有关当MSSQL无法调用Xp_CmdShell时该怎么办,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收

    攻略 2021年12月14日
  • python二叉树详解(python 二叉树的最大深度)

    技术python二叉树的深度该如何理解今天就跟大家聊聊有关python二叉树的深度该如何理解,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。序主要记录一下二叉树的深

    攻略 2021年12月13日
  • 误删数据库数据后的处理方法有哪些

    技术误删数据库数据后的处理方法有哪些本篇内容介绍了“误删数据库数据后的处理方法有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够

    攻略 2021年11月5日
  • PostgreSQL数据库如何实现客户端验证

    技术PostgreSQL数据库如何实现客户端验证这篇文章将为大家详细讲解有关PostgreSQL数据库如何实现客户端验证,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。身份验证是数据库服

    攻略 2021年11月25日
  • 如何使用mysqldump对mysql进行备份和恢复

    技术如何使用mysqldump对mysql进行备份和恢复这篇文章给大家分享的是有关如何使用mysqldump对mysql进行备份和恢复的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。mysqld

    攻略 2021年11月3日