java死锁发生的必要条件
发表于:2025-02-01 作者:千家信息网编辑
千家信息网最后更新 2025年02月01日,这篇文章主要讲解了"java死锁发生的必要条件",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"java死锁发生的必要条件"吧!死锁的必要条件互斥条件请求
千家信息网最后更新 2025年02月01日java死锁发生的必要条件
这篇文章主要讲解了"java死锁发生的必要条件",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"java死锁发生的必要条件"吧!
死锁的必要条件
互斥条件
请求和保持条件
不剥夺条件
环路等待条件
/** * 一个简单的死锁类 * 当DeadLock的对象flag==1时(d1), 先锁定o1,睡眠500毫秒 * 而d1在睡眠的时候留一个flag=0的对象(d2)线程启动,先锁定o2,睡眠500毫秒 * d1睡眠结束后需要锁定o2才能继续执行,而此时o2已经被d2锁定; * d2睡眠结束后需要锁定o1才能继续执行,而此时o1已经被d1锁定; * d1,d2相互等待,都需要得到对方锁定改的资源才能继续执行,从而死锁 */@Slf4jpublic class DeadLock implements Runnable { public int flag = 1; //静态资源是类的所有对象共享的 private static Object o1 = new Object(), o2 = new Object(); @Override public void run() { log.info("flag:{}", flag); if(flag == 1){ synchronized (o1) { try{ Thread.sleep(500); } catch (Exception e){ e.printStackTrace(); } synchronized (o2) { log.info("1"); } } } if (flag == 0) { synchronized (o2) { try { Thread.sleep(500); }catch (Exception e){ e.printStackTrace(); } synchronized (o1) { log.info("0"); } } } } public static void main(String[] args) { DeadLock d1 = new DeadLock(); DeadLock d2 = new DeadLock(); d1.flag = 1; d2.flag = 0; //d1,d2都处于可执行状态,但JVM线程调度先执行哪个线程是不确定的。 //d2的run()可能在d1的run()之前执行 new Thread(d1).start(); new Thread(d2).start(); }}
如何避免死锁:
注意加锁顺序
加锁时间限制,可以使用ReentrantLock可以设置获取所得给定时间,超过一定时间就释放自己占用的锁
感谢各位的阅读,以上就是"java死锁发生的必要条件"的内容了,经过本文的学习后,相信大家对java死锁发生的必要条件这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是,小编将为大家推送更多相关知识点的文章,欢迎关注!
条件
死锁
必要
必要条件
睡眠
对象
时间
线程
学习
内容
资源
对方
就是
思路
情况
所得
文章
时候
更多
状态
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
船级社对智能船的网络安全
信息网络技术干啥的
检查网络安全知识
微软资深软件开发测试工程师
阿里云服务器删除实例
服务器安全卫士哪个好
优化数据库结构图解
中国科学数据库官网
查重系统数据库更新时间
网络安全常识 题
车联网网络安全和信息安全
西宁软件开发招聘
dm数据库 指定主机连接
社区开展网络安全讲座
手机网络安全使用措施50字
网络工程师服务器配置图
海南师范大学网络安全调剂信息
ios数据库操作
旅游管理数据库论文
东莞市汉方软件开发有限公司
网络安全维护工程师证
计算机网络技术一月工资
数据库时间与客户端时间不同步
一年级录制网络安全视频
鲁南制药软件开发怎么样
app软件开发代理
数据库错误1064
软件开发用户报告
学校网络安全排查
阜阳市公安局网络安全保卫支队