死锁简单的一个实现样例--(面试中总会问到的一个死锁问题)

在面试中,许多面试官都会在多线程开发中深入去考察,然而死锁问题是大多数面试官喜欢问的一个问题,

下方为一个简单的死锁代码实现:(其实话题理解很简单,和贪吃蛇一样头咬着尾巴)

package com.thread.xzz;

/**
 * 一个简单的死锁类
 * 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();


    }
}

上述代码就会产生死锁:


我是A方法中获得到了A锁
我是B方法中获得到了b锁

 

在面试中问到一定不要发蒙,要理解好死锁是如何产生的思路清晰 代码即可实现。

你可能感兴趣的:(死锁简单的一个实现样例--(面试中总会问到的一个死锁问题))