死锁编码及定位分析

it2022-05-05  121

死锁编码及定位分析

class Resource{ String re_a = "re_a"; String re_b = "re_b"; } public class Test { public static void main(String[] args) { Resource s = new Resource(); new Thread(()->{ synchronized (s.re_a){ System.out.println(Thread.currentThread().getName()+"得到"+s.re_a); synchronized (s.re_b){ System.out.println(Thread.currentThread().getName()+"得到"+s.re_b); } } },"A").start(); new Thread(()->{ synchronized (s.re_b){ System.out.println(Thread.currentThread().getName()+"得到"+s.re_b); synchronized (s.re_a){ System.out.println(Thread.currentThread().getName()+"得到"+s.re_a); } } },"B").start(); } }

输出

A得到re_a B得到re_b

jps命令定位进程号

G:\IDE\Project\java-juc>jps -l 17044 33300 sun.tools.jps.Jps 7044 5448 death_lock.Test 19788 24748 org.jetbrains.jps.cmdline.Launcher

jstack 进程号 查看进程

G:\IDE\Project\java-juc>jstack 5448 ... ... ... Java stack information for the threads listed above: =================================================== "B": at death_lock.Test.lambda$main$1(Test.java:26) - waiting to lock <0x00000000d5f36810> (a java.lang.String) - locked <0x00000000d5f36840> (a java.lang.String) at death_lock.Test$$Lambda$2/1747585824.run(Unknown Source) at java.lang.Thread.run(Thread.java:748) "A": at death_lock.Test.lambda$main$0(Test.java:17) - waiting to lock <0x00000000d5f36840> (a java.lang.String) - locked <0x00000000d5f36810> (a java.lang.String) at death_lock.Test$$Lambda$1/1078694789.run(Unknown Source) at java.lang.Thread.run(Thread.java:748) Found 1 deadlock.

最新回复(0)