您当前的位置: 首页 >  Java

java持续实践

暂无认证

  • 1浏览

    0关注

    746博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

Java多线程 演示死锁的发生

java持续实践 发布时间:2020-09-01 07:41:05 ,浏览量:1

文章目录
      • 演示死锁的发生

演示死锁的发生

如下的代码演示了死锁的发生. 在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方法打印了输出语句之后, 就进入了死锁的阶段. 控制台的红色按钮一直亮着 ,说明程序一直在运行中, 发生了死锁.

关注
打赏
1658054974
查看更多评论
立即登录/注册

微信扫码登录

0.0379s