美文网首页
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