5分钟30行java代码了解死锁

2020-02-12  本文已影响0人  mrfly520

个人理解:
死锁本质就是线程在等待获得它永远无法等到的锁,然后傻傻的一直等,使得该线程无法执行后面的任务.
形成条件:
如何才能获得构造出这种情况呢,最简单的模型就是两个线程和两个锁,每个线程运行一段时间后获得自己的锁,再运行一段时间后,在释放自己的锁前,又想要获得对方的锁.然后两线程就陷入了无尽的等待.
为什么会变成这样子呢?本来高高兴兴,本来双倍快乐,是道德的沦丧还是人性的扭曲?!!话不多说看一下代码吧

public class DeadLock {
    static Object lock1 = new Object();
    static Object lock2 = new Object();
    public static void main(String[] args) throws Exception {
        new Thread(()->{
            try {
                System.out.println("线程1开始执行");
                fun1();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }).start();
        new Thread(()->{
            try {
                System.out.println("线程2开始执行");
                fun2();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }).start();
    }
    static void fun1() throws InterruptedException {
        synchronized (lock1){
            System.out.println("执行方法1");
            Thread.sleep(2000);
            fun2();
        }
    }
    private static void fun2() throws InterruptedException {
        synchronized (lock2){
            System.out.println("执行方法2");
            fun1();
        }
    }
}
上一篇 下一篇

猜你喜欢

热点阅读