2021-04-24 死锁的条件

死锁的四个条件
package hxy.bytecode.thread;

public class DeadThead {
    public static void main(String[] args) {
        Object a = new Object();
        Object b = new Object();


        new Thread(() -> {
            synchronized (a) {
                System.out.println("I get a");
                try {
                    Thread.sleep(2000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }

                System.out.println("I want to get b");
                synchronized (b) {
                    System.out.println("I am a and   get b");
                }

            }
        }).start();

        new Thread(() -> {
            synchronized (b) {
                System.out.println("I get b");
                try {
                    Thread.sleep(2000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }

                System.out.println("I want to get a");
                synchronized (a) {
                    System.out.println("I am b and   get a");
                }

            }
        }).start();

        System.out.println("done");
    }
}

效果如下


image.png

查看java进程

$ jps
image.png

查看死锁分析

$ jstack
image.png
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容