Java多线程 演示死锁的发生
发布日期:2021-06-30 13:12:05
浏览次数:2
分类:技术文章
本文共 1811 字,大约阅读时间需要 6 分钟。
文章目录
演示死锁的发生
如下的代码演示了死锁的发生.
在run方法中, flag等于1 的时候, 线程1 ,获得了锁1, 需要拿到锁2 . flag等于2的时候, 线程2获得了锁2 ,需要拿到锁1, 创建两个线程的时候, 给线程1的flag赋值为1 , 线程2赋值为2.这样创建线程, 启动线程的时候, 线程1 和2 分别拥有了锁1 和2 ,但是同时又需要拿到锁2和1 . 线程1和2也没有释放锁1和2. 这样就造成了相互等待锁资源,造成了死锁的发生.
package com.thread.background;/** * 类名称:DeadLockDemo * 类描述: 线程安全问题,演示死锁。 * * @author: https://javaweixin6.blog.csdn.net/ * 创建时间:2020/9/1 7:22 * Version 1.0 */public class DeadLockDemo implements Runnable { int flag = 1; //两把锁 static Object o1 = new Object(); static Object o2 = new Object(); public static void main(String[] args) { DeadLockDemo r1 = new DeadLockDemo(); DeadLockDemo r2 = new DeadLockDemo(); r1.flag=1; r2.flag=2; new Thread(r1,"thread1").start(); new Thread(r2,"thread2").start(); } @Override public void run() { System.out.println(Thread.currentThread().getName()+ " flag = " + flag); if (flag == 1) { //获取第一把锁 synchronized (o1) { try { Thread.sleep(1000L); } catch (InterruptedException e) { e.printStackTrace(); } //获取第二把锁 synchronized (o2) { System.out.println("1"); } } } if (flag == 2) { //获取第一把锁 synchronized (o2) { try { Thread.sleep(1000L); } catch (InterruptedException e) { e.printStackTrace(); } //获取第二把锁 synchronized (o1) { System.out.println("2"); } } } }}
运行程序可以看到线程1和2 分别进入run方法打印了输出语句之后, 就进入了死锁的阶段.
控制台的红色按钮一直亮着 ,说明程序一直在运行中, 发生了死锁.转载地址:https://javaweixin6.blog.csdn.net/article/details/108333257 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
做的很好,不错不错
[***.243.131.199]2024年04月30日 23时39分46秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
Trie树(字典树)
2019-04-30
COMP7404 Machine Learing——ROC
2019-04-30
MATLAB与CUDA
2019-04-30
Linux png转jpg (convert命令)
2019-04-30
Ubuntu更新后终端中字体的颜色全是白色
2019-04-30
vscode git
2019-04-30
基于MATLAB的二进制数字调制与解调信号的仿真——2PSK
2019-04-30
基于MATLAB的模拟调制信号与解调的仿真——DSB
2019-04-30
HDU - 1166 敌兵布阵 (树状数组模板题/线段树模板题)
2019-04-30
CodeForces - 761C Dasha and Password (思维 暴力)
2019-04-30
CodeForces - 456C Boredom (dp)
2019-04-30
CodeForces - 675A Infinite Sequence(简单数论 细节)
2019-04-30
CodeForces - 1042B Vitamins (思维)
2019-04-30
ACM 2013 长沙区域赛 Collision (几何)
2019-04-30
ACM 2014 鞍山区域赛 E - Hatsune Miku (dp)
2019-04-30
反向传播&梯度下降 的直观理解程序(numpy)
2019-04-30
CodeForces - 931B World Cup (思维 模拟)
2019-04-30