码迷,mamicode.com
首页 > 编程语言 > 详细

java死锁程序

时间:2020-04-30 21:19:28      阅读:65      评论:0      收藏:0      [点我收藏+]

标签:deadlock   释放   获取   rac   死锁   资源   static   nts   创建   

(1)死锁案例

/**
 * 一个简单的死锁类
 * main方法中启动两个线程,分别调用methodA和methodB方法
 * methodA方法首先获取到a对象的锁,睡眠1秒钟
 * 此时methodB方法执行获取到b对象的锁,睡眠1秒
 * 此时methodA需要去获取b对象的锁才能继续执行,但是b锁没有被释放无法获取到
 * 此时methodB需要去获取a对象的锁才能继续执行,但是a锁没有被释放无法获取到
 * 从而两者相互等待,都需要得到对方锁定的资源才能继续执行,从而死锁。
 */
public class DeadLock {
    private static String a = "1";

    private static String b = "2";
 
    public void methodA() {
        synchronized (a) {
            System.out.println("我是A方法中获得到了A锁");
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            synchronized (b) {
                System.out.println("我是A方法中获取到b锁");
            }
        }
 
    }
 
    public void methodB() {
        synchronized (b) {
            System.out.println("我是B方法中获得到了b锁");
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            synchronized (a) {
                System.out.println("我是B方法中获取到a锁");
            }
        }
 
    }
 
    public static void main(String[] args) {
      
        new Thread(() -> {
            d.methodA();
        }).start();
        new Thread(() -> {
            d.methodB();
        }).start();

//        new Thread(new Runnable() {
//            @Override
//            public void run() {
//                d.methodB();
//            }
//        }).start();
 
    }
}

(2)用普通匿名类创建一个线程

java死锁程序

标签:deadlock   释放   获取   rac   死锁   资源   static   nts   创建   

原文地址:https://www.cnblogs.com/hdc520/p/12811033.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!