java死锁程序

Posted hdc520

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java死锁程序相关的知识,希望对你有一定的参考价值。

(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死锁程序的主要内容,如果未能解决你的问题,请参考以下文章

JAVA程序设计,多线程且避免死锁

java 死锁

Android-Java-死锁

并发编程--锁--如何使用命令行和代码定位死锁

Java编程写一个会导致死锁的程序

用java多线程编写哲学家就餐程序 利用多线程技术编写哲学家就餐程序,使之在运行时能演示产生死锁的情况,