java死锁程序

2021-02-02 07:14

阅读:495

标签: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


评论


亲,登录后才可以留言!