美文网首页
5分钟30行java代码了解死锁

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

作者: mrfly520 | 来源:发表于2020-02-12 15:38 被阅读0次

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

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();
        }
    }
}

相关文章

网友评论

      本文标题:5分钟30行java代码了解死锁

      本文链接:https://www.haomeiwen.com/subject/nbhcfhtx.html