死锁

public class DeadThread {

    private static Object monitorA = new Object();

    private static Object monitorB = new Object();

    public static void main(String[] args) {
        Thread threadA = new Thread(new Runnable() {
            @Override
            public void run()   {
                synchronized(monitorA) {
                    System.out.println("线程A获取已获取锁A");
                    try {
                        Thread.sleep(100);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }

                    System.out.println("线程A准备获取锁B");
                    synchronized(monitorB) {
                        System.out.println("线程A已经获取锁B");
                    }
                }
                System.out.println("线程A run方法结束");
            }
        });

        Thread threadB = new Thread(new Runnable() {
            @Override
            public void run()   {
                synchronized(monitorB) {
                    System.out.println("线程B获取已获取锁B");
                    try {
                        Thread.sleep(100);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }

                    System.out.println("线程B准备获取锁A");
                    synchronized(monitorA) {
                        System.out.println("线程B已经获取锁A");
                    }
                }
                System.out.println("线程B run方法结束");
            }
        });

        threadA.start();
        threadB.start();
    }
}

运行结果

D:javajdk1.8.0_191injava.exe -javaagent:D:programideaIU-2018.3.4.winlibidea_rt.jar=51732:D:programideaIU-2018.3.4.winin -Dfile.encoding=UTF-8 -classpath D:javajdk1.8.0_191jrelibcharsets.jar;D:javajdk1.8.0_191jrelibdeploy.jar;D:javajdk1.8.0_191jrelibextaccess-bridge-64.jar;D:javajdk1.8.0_191jrelibextcldrdata.jar;D:javajdk1.8.0_191jrelibextdnsns.jar;D:javajdk1.8.0_191jrelibextjaccess.jar;D:javajdk1.8.0_191jrelibextjfxrt.jar;D:javajdk1.8.0_191jrelibextlocaledata.jar;D:javajdk1.8.0_191jrelibext ashorn.jar;D:javajdk1.8.0_191jrelibextsunec.jar;D:javajdk1.8.0_191jrelibextsunjce_provider.jar;D:javajdk1.8.0_191jrelibextsunmscapi.jar;D:javajdk1.8.0_191jrelibextsunpkcs11.jar;D:javajdk1.8.0_191jrelibextzipfs.jar;D:javajdk1.8.0_191jrelibjavaws.jar;D:javajdk1.8.0_191jrelibjce.jar;D:javajdk1.8.0_191jrelibjfr.jar;D:javajdk1.8.0_191jrelibjfxswt.jar;D:javajdk1.8.0_191jrelibjsse.jar;D:javajdk1.8.0_191jrelibmanagement-agent.jar;D:javajdk1.8.0_191jrelibplugin.jar;D:javajdk1.8.0_191jrelib esources.jar;D:javajdk1.8.0_191jrelib t.jar;D:javaIdeaProjectsmessage argetclasses;D:javajarmavenorgspringframeworkcloudspring-cloud-netflix-eureka-server2.0.0.RELEASEspring-cloud-netflix-eureka-server-2.0.0.RELEASE.jar;D:javajarmavenorgspringframeworkootspring-boot-starter-web2.0.4.RELEASEspring-boot-starter-web-2.0.4.RELEASE.jar;D:javajarmavenorgspringframeworkootspring-boot-starter-json2.0.4.RELEASEspring-boot-starter-json-2.0.4.RELEASE.jar;D:javajarmavencomfasterxmljacksondatatypejackson-datatype-jdk82.9.6jackson-datatype-jdk8-2.9.6.jar;D:javajarmavencomfasterxmljacksondatatypejackson-datatype-jsr3102.9.6jackson-datatype-jsr310-2.9.6.jar;D:javajarmavencomfasterxmljacksonmodulejackson-module-parameter-names2.9.6jackson-module-parameter-names-2.9.6.jar;D:javajarmavenorgspringframeworkootspring-boot-starter-tomcat2.0.4.RELEASEspring-boot-starter-tomcat-2.0.4.RELEASE.jar;D:javajarmavenorgapache omcatembed omcat-embed-core8.5.32 omcat-embed-core-8.5.32.jar;D:javajarmavenorgapache omcatembed omcat-embed-el8.5.32 omcat-embed-el-8.5.32.jar;D:javajarmavenorgapache omcatembed omcat-embed-websocket8.5.32 omcat-embed-websocket-8.5.32.jar;D:javajarmavenorghibernatevalidatorhibernate-validator6.0.11.Finalhibernate-validator-6.0.11.Final.jar;D:javajarmavenjavaxvalidationvalidation-api2.0.1.Finalvalidation-api-2.0.1.Final.jar;D:javajarmavenorgjbossloggingjboss-logging3.3.2.Finaljboss-logging-3.3.2.Final.jar;D:javajarmavencomfasterxmlclassmate1.3.4classmate-1.3.4.jar;D:javajarmavenorgspringframeworkspring-web5.0.8.RELEASEspring-web-5.0.8.RELEASE.jar;D:javajarmavenorgspringframeworkspring-beans5.0.8.RELEASEspring-beans-5.0.8.RELEASE.jar;D:javajarmavenorgspringframeworkspring-webmvc5.0.8.RELEASEspring-webmvc-5.0.8.RELEASE.jar;D:javajarmavenorgspringframeworkspring-aop5.0.8.RELEASEspring-aop-5.0.8.RELEASE.jar;D:javajarmavenorgspringframeworkspring-context5.0.8.RELEASEspring-context-5.0.8.RELEASE.jar;D:javajarmavenorgspringframeworkspring-expression5.0.8.RELEASEspring-expression-5.0.8.RELEASE.jar;D:javajarmavenorgspringframeworkootspring-boot-starter-actuator2.0.4.RELEASEspring-boot-starter-actuator-2.0.4.RELEASE.jar;D:javajarmavenorgspringframeworkootspring-boot-actuator-autoconfigure2.0.4.RELEASEspring-boot-actuator-autoconfigure-2.0.4.RELEASE.jar;D:javajarmavenorgspringframeworkootspring-boot-actuator2.0.4.RELEASEspring-boot-actuator-2.0.4.RELEASE.jar;D:javajarmaveniomicrometermicrometer-core1.0.6micrometer-core-1.0.6.jar;D:javajarmavenorghdrhistogramHdrHistogram2.1.10HdrHistogram-2.1.10.jar;D:javajarmavenorglatencyutilsLatencyUtils2.0.3LatencyUtils-2.0.3.jar;D:javajarmavenorgspringframeworkootspring-boot-starter-freemarker2.0.4.RELEASEspring-boot-starter-freemarker-2.0.4.RELEASE.jar;D:javajarmavenorgfreemarkerfreemarker2.3.28freemarker-2.3.28.jar;D:javajarmavenorgspringframeworkspring-context-support5.0.8.RELEASEspring-context-support-5.0.8.RELEASE.jar;D:javajarmavenorgspringframeworkcloudspring-cloud-commons2.0.0.RELEASEspring-cloud-commons-2.0.0.RELEASE.jar;D:javajarmavenorgspringframeworksecurityspring-security-crypto5.0.7.RELEASEspring-security-crypto-5.0.7.RELEASE.jar;D:javajarmavenorgspringframeworkcloudspring-cloud-netflix-core2.0.0.RELEASEspring-cloud-netflix-core-2.0.0.RELEASE.jar;D:javajarmavenorgspringframeworkootspring-boot-autoconfigure2.0.4.RELEASEspring-boot-autoconfigure-2.0.4.RELEASE.jar;D:javajarmavenorgspringframeworkootspring-boot-starter-aop2.0.4.RELEASEspring-boot-starter-aop-2.0.4.RELEASE.jar;D:javajarmavenorgaspectjaspectjweaver1.8.13aspectjweaver-1.8.13.jar;D:javajarmavenorgspringframeworkcloudspring-cloud-netflix-eureka-client2.0.0.RELEASEspring-cloud-netflix-eureka-client-2.0.0.RELEASE.jar;D:javajarmavencom etflixeurekaeureka-client1.9.2eureka-client-1.9.2.jar;D:javajarmavenorgcodehausjettisonjettison1.3.7jettison-1.3.7.jar;D:javajarmavenstaxstax-api1.0.1stax-api-1.0.1.jar;D:javajarmavencom etflix etflix-commons etflix-eventbus.3.0 etflix-eventbus-0.3.0.jar;D:javajarmavencom etflix etflix-commons etflix-infix.3.0 etflix-infix-0.3.0.jar;D:javajarmavencommons-jxpathcommons-jxpath1.3commons-jxpath-1.3.jar;D:javajarmavenjoda-timejoda-time2.9.9joda-time-2.9.9.jar;D:javajarmavenorgantlrantlr-runtime3.4antlr-runtime-3.4.jar;D:javajarmavenorgantlrstringtemplate3.2.1stringtemplate-3.2.1.jar;D:javajarmavenantlrantlr2.7.7antlr-2.7.7.jar;D:javajarmavencomgooglecodegsongson2.8.5gson-2.8.5.jar;D:javajarmavenorgapachecommonscommons-math2.2commons-math-2.2.jar;D:javajarmavenjavaxws sjsr311-api1.1.1jsr311-api-1.1.1.jar;D:javajarmavencom etflixservoservo-core.12.21servo-core-0.12.21.jar;D:javajarmavencomsunjerseyjersey-core1.19.1jersey-core-1.19.1.jar;D:javajarmavencomsunjerseyjersey-client1.19.1jersey-client-1.19.1.jar;D:javajarmavencomsunjerseycontribsjersey-apache-client41.19.1jersey-apache-client4-1.19.1.jar;D:javajarmavenorgapachehttpcomponentshttpclient4.5.6httpclient-4.5.6.jar;D:javajarmavenorgapachehttpcomponentshttpcore4.4.10httpcore-4.4.10.jar;D:javajarmavencommons-codeccommons-codec1.11commons-codec-1.11.jar;D:javajarmavencomgoogleinjectguice4.1.0guice-4.1.0.jar;D:javajarmavenaopallianceaopalliance1.0aopalliance-1.0.jar;D:javajarmavencomgithubvlsicompactmapcompactmap1.2.1compactmap-1.2.1.jar;D:javajarmavencomgithubandrewomadexxdexx-collections.2dexx-collections-0.2.jar;D:javajarmavencomfasterxmljacksoncorejackson-annotations2.9.0jackson-annotations-2.9.0.jar;D:javajarmavencomfasterxmljacksoncorejackson-core2.9.6jackson-core-2.9.6.jar;D:javajarmavencomfasterxmljacksoncorejackson-databind2.9.6jackson-databind-2.9.6.jar;D:javajarmavencomsunjerseyjersey-servlet1.19.1jersey-servlet-1.19.1.jar;D:javajarmavencomsunjerseyjersey-server1.19.1jersey-server-1.19.1.jar;D:javajarmavencom etflixeurekaeureka-core1.9.2eureka-core-1.9.2.jar;D:javajarmavenorgcodehauswoodstoxwoodstox-core-asl4.4.1woodstox-core-asl-4.4.1.jar;D:javajarmavenjavaxxmlstreamstax-api1.0-2stax-api-1.0-2.jar;D:javajarmavencom etflixarchaiusarchaius-core.7.6archaius-core-0.7.6.jar;D:javajarmavencomgooglecodefindbugsjsr3053.0.1jsr305-3.0.1.jar;D:javajarmavencommons-configurationcommons-configuration1.8commons-configuration-1.8.jar;D:javajarmavencommons-langcommons-lang2.6commons-lang-2.6.jar;D:javajarmavencomgoogleguavaguava16.0guava-16.0.jar;D:javajarmavenjavaxinjectjavax.inject1javax.inject-1.jar;D:javajarmavencomfasterxmljacksondataformatjackson-dataformat-xml2.9.6jackson-dataformat-xml-2.9.6.jar;D:javajarmavencomfasterxmljacksonmodulejackson-module-jaxb-annotations2.9.6jackson-module-jaxb-annotations-2.9.6.jar;D:javajarmavenorgcodehauswoodstoxstax2-api3.1.4stax2-api-3.1.4.jar;D:javajarmavencomfasterxmlwoodstoxwoodstox-core5.0.3woodstox-core-5.0.3.jar;D:javajarmavencom houghtworksxstreamxstream1.4.10xstream-1.4.10.jar;D:javajarmavenxmlpullxmlpull1.1.3.1xmlpull-1.1.3.1.jar;D:javajarmavenxpp3xpp3_min1.1.4cxpp3_min-1.1.4c.jar;D:javajarmavenorgspringframeworkootspring-boot-starter2.0.4.RELEASEspring-boot-starter-2.0.4.RELEASE.jar;D:javajarmavenorgspringframeworkootspring-boot2.0.4.RELEASEspring-boot-2.0.4.RELEASE.jar;D:javajarmavenorgspringframeworkootspring-boot-starter-logging2.0.4.RELEASEspring-boot-starter-logging-2.0.4.RELEASE.jar;D:javajarmavenchqoslogbacklogback-classic1.2.3logback-classic-1.2.3.jar;D:javajarmavenchqoslogbacklogback-core1.2.3logback-core-1.2.3.jar;D:javajarmavenorgapachelogginglog4jlog4j-to-slf4j2.10.0log4j-to-slf4j-2.10.0.jar;D:javajarmavenorgapachelogginglog4jlog4j-api2.10.0log4j-api-2.10.0.jar;D:javajarmavenorgslf4jjul-to-slf4j1.7.25jul-to-slf4j-1.7.25.jar;D:javajarmavenjavaxannotationjavax.annotation-api1.3.2javax.annotation-api-1.3.2.jar;D:javajarmavenorgyamlsnakeyaml1.19snakeyaml-1.19.jar;D:javajarmavenorgspringframeworkspring-core5.0.8.RELEASEspring-core-5.0.8.RELEASE.jar;D:javajarmavenorgspringframeworkspring-jcl5.0.8.RELEASEspring-jcl-5.0.8.RELEASE.jar;D:javajarmavenorgprojectlomboklombok1.16.22lombok-1.16.22.jar;D:javajarmavenorgfreeswitcheslclientorg.freeswitch.esl.client.9.2org.freeswitch.esl.client-0.9.2.jar;D:javajarmavenorgslf4jslf4j-api1.7.25slf4j-api-1.7.25.jar;D:javajarmavenorgjboss etty etty3.2.1.Final etty-3.2.1.Final.jar;D:javajarmavenlog4jlog4j1.2.17log4j-1.2.17.jar com.matt.message.thread.DeadThread
线程A获取已获取锁A
线程B获取已获取锁B
线程A准备获取锁B
线程B准备获取锁A


C:UsersAdministrator>jstack 4736
2019-07-11 22:43:59
Full thread dump Java HotSpot(TM) 64-Bit Server VM (25.191-b12 mixed mode):

"DestroyJavaVM" #13 prio=5 os_prio=0 tid=0x0000000001c6e000 nid=0x1404 waiting on condition [0x0000000000000000]
java.lang.Thread.State: RUNNABLE

"Thread-1" #12 prio=5 os_prio=0 tid=0x0000000059000000 nid=0x17f8 waiting for monitor entry [0x000000005a0af000]
java.lang.Thread.State: BLOCKED (on object monitor)
at com.matt.message.thread.DeadThread$2.run(DeadThread.java:45)
- waiting to lock <0x00000000d6451490> (a java.lang.Object)
- locked <0x00000000d64514a0> (a java.lang.Object)
at java.lang.Thread.run(Thread.java:748)

"Thread-0" #11 prio=5 os_prio=0 tid=0x0000000058fff000 nid=0x1298 waiting for monitor entry [0x0000000059faf000]
java.lang.Thread.State: BLOCKED (on object monitor)
at com.matt.message.thread.DeadThread$1.run(DeadThread.java:25)
- waiting to lock <0x00000000d64514a0> (a java.lang.Object)
- locked <0x00000000d6451490> (a java.lang.Object)
at java.lang.Thread.run(Thread.java:748)

"Service Thread" #10 daemon prio=9 os_prio=0 tid=0x0000000058ebc800 nid=0x1780 runnable [0x0000000000000000]
java.lang.Thread.State: RUNNABLE

"C1 CompilerThread2" #9 daemon prio=9 os_prio=2 tid=0x00000000589cf800 nid=0x1014 waiting on condition [0x00000000000000
00]
java.lang.Thread.State: RUNNABLE

"C2 CompilerThread1" #8 daemon prio=9 os_prio=2 tid=0x00000000589cd800 nid=0x80c waiting on condition [0x000000000000000
0]
java.lang.Thread.State: RUNNABLE

"C2 CompilerThread0" #7 daemon prio=9 os_prio=2 tid=0x00000000589cc800 nid=0x1398 waiting on condition [0x00000000000000
00]
java.lang.Thread.State: RUNNABLE

"Monitor Ctrl-Break" #6 daemon prio=5 os_prio=0 tid=0x00000000589cb000 nid=0x13a0 runnable [0x0000000058c0f000]
java.lang.Thread.State: RUNNABLE
at java.net.SocketInputStream.socketRead0(Native Method)
at java.net.SocketInputStream.socketRead(SocketInputStream.java:116)
at java.net.SocketInputStream.read(SocketInputStream.java:171)
at java.net.SocketInputStream.read(SocketInputStream.java:141)
at sun.nio.cs.StreamDecoder.readBytes(StreamDecoder.java:284)
at sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:326)
at sun.nio.cs.StreamDecoder.read(StreamDecoder.java:178)
- locked <0x00000000d64f6448> (a java.io.InputStreamReader)
at java.io.InputStreamReader.read(InputStreamReader.java:184)
at java.io.BufferedReader.fill(BufferedReader.java:161)
at java.io.BufferedReader.readLine(BufferedReader.java:324)
- locked <0x00000000d64f6448> (a java.io.InputStreamReader)
at java.io.BufferedReader.readLine(BufferedReader.java:389)
at com.intellij.rt.execution.application.AppMainV2$1.run(AppMainV2.java:64)

"Attach Listener" #5 daemon prio=5 os_prio=2 tid=0x00000000585f4000 nid=0xdac waiting on condition [0x0000000000000000]
java.lang.Thread.State: RUNNABLE

"Signal Dispatcher" #4 daemon prio=9 os_prio=2 tid=0x0000000057035000 nid=0x16e4 runnable [0x0000000000000000]
java.lang.Thread.State: RUNNABLE

"Finalizer" #3 daemon prio=8 os_prio=1 tid=0x0000000057021800 nid=0x126c in Object.wait() [0x00000000585cf000]
java.lang.Thread.State: WAITING (on object monitor)
at java.lang.Object.wait(Native Method)
- waiting on <0x00000000d6188ed0> (a java.lang.ref.ReferenceQueue$Lock)
at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:144)
- locked <0x00000000d6188ed0> (a java.lang.ref.ReferenceQueue$Lock)
at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:165)
at java.lang.ref.Finalizer$FinalizerThread.run(Finalizer.java:216)

"Reference Handler" #2 daemon prio=10 os_prio=2 tid=0x000000005701a800 nid=0xf34 in Object.wait() [0x00000000583ff000]
java.lang.Thread.State: WAITING (on object monitor)
at java.lang.Object.wait(Native Method)
- waiting on <0x00000000d6186bf8> (a java.lang.ref.Reference$Lock)
at java.lang.Object.wait(Object.java:502)
at java.lang.ref.Reference.tryHandlePending(Reference.java:191)
- locked <0x00000000d6186bf8> (a java.lang.ref.Reference$Lock)
at java.lang.ref.Reference$ReferenceHandler.run(Reference.java:153)

"VM Thread" os_prio=2 tid=0x0000000056fd2800 nid=0xde0 runnable

"GC task thread#0 (ParallelGC)" os_prio=0 tid=0x0000000001c82000 nid=0x7d4 runnable

"GC task thread#1 (ParallelGC)" os_prio=0 tid=0x0000000001c83800 nid=0x1100 runnable

"GC task thread#2 (ParallelGC)" os_prio=0 tid=0x0000000001c85800 nid=0x163c runnable

"GC task thread#3 (ParallelGC)" os_prio=0 tid=0x0000000001c87800 nid=0xbd4 runnable

"VM Periodic Task Thread" os_prio=2 tid=0x0000000058f6d800 nid=0x560 waiting on condition

JNI global references: 12


Found one Java-level deadlock:
=============================
"Thread-1":
waiting to lock monitor 0x000000005701ffa8 (object 0x00000000d6451490, a java.lang.Object),
which is held by "Thread-0"
"Thread-0":
waiting to lock monitor 0x0000000057021448 (object 0x00000000d64514a0, a java.lang.Object),
which is held by "Thread-1"

Java stack information for the threads listed above:
===================================================
"Thread-1":
at com.matt.message.thread.DeadThread$2.run(DeadThread.java:45)
- waiting to lock <0x00000000d6451490> (a java.lang.Object)
- locked <0x00000000d64514a0> (a java.lang.Object)
at java.lang.Thread.run(Thread.java:748)
"Thread-0":
at com.matt.message.thread.DeadThread$1.run(DeadThread.java:25)
- waiting to lock <0x00000000d64514a0> (a java.lang.Object)
- locked <0x00000000d6451490> (a java.lang.Object)
at java.lang.Thread.run(Thread.java:748)

Found 1 deadlock.


C:UsersAdministrator>

原文地址:https://www.cnblogs.com/zhongchang/p/11173325.html