PackageCom.xwolf.java.thread.ch2;/*** Created by Administrator on 2016/1/4 0004.*/ Public classDeadLock {Private StaticString a = "a"; Private StaticString B = "B"; Public Static voidMain (string[] args) {NewDeadLock (). DeadLock (); } Private voidDeadLock () {Thread thread1=NewThread (NewRunnable () { Public voidrun () {synchronized(a) {Try{Thread.CurrentThread (). Sleep (1000); } Catch(interruptedexception e) {e.printstacktrace (); } synchronized(b) {System.out.println ("Thread-0001"); } } } }); Thread thread2=NewThread (NewRunnable () { Public voidrun () {synchronized(b) {synchronized(a) {System.out.println ("Thread-0002"); } } } }); Thread1.start (); Thread2.start (); }}
\d:\program Files\java\jdk1.7.0_79\bin>jps
11212 Launcher
7332 Jps
2744 Remotemavenserver
10108 Nailgunrunner
7760 Appmain
7152
D:\Program files\java\jdk1.7.0_79\bin>jstack-l 7760
2016-01-04 16:36:17
Full thread dump Java HotSpot (TM) 64-bit Server VM (24.79-b02 mixed mode):
"DESTROYJAVAVM" prio=6 tid=0x0000000002745000 nid=0x2aa8 waiting on condition [0x0000000000000000]
Java.lang.Thread.State:RUNNABLE
Locked ownable Synchronizers:
-None
"Thread-1" prio=6 tid=0x000000000ef63800 nid=0x13ec waiting for monitor entry [0x000000000fa1f000]
Java.lang.Thread.State:BLOCKED (on object monitor)
At Com.xwolf.java.thread.ch2.deadlock$2.run (deadlock.java:44)
-Waiting to lock <0x00000007c0b57ee8> (a java.lang.String)
-Locked <0x00000007c0b57f18> (a java.lang.String)
At Java.lang.Thread.run (thread.java:745)
Locked ownable Synchronizers:
-None
"Thread-0" prio=6 tid=0x000000000ef62800 nid=0x1c58 waiting for monitor entry [0x000000000f91f000]
Java.lang.Thread.State:BLOCKED (on object monitor)
At Com.xwolf.java.thread.ch2.deadlock$1.run (deadlock.java:28)
-Waiting to lock <0x00000007c0b57f18> (a java.lang.String)
-Locked <0x00000007c0b57ee8> (a java.lang.String)
At Java.lang.Thread.run (thread.java:745)
Locked ownable Synchronizers:
-None
"Monitor ctrl-break" daemon prio=6 tid=0x000000000ef72000 nid=0x18d4 runnable [0x000000000f81e000]
Java.lang.Thread.State:RUNNABLE
At Java.net.DualStackPlainSocketImpl.accept0 (Native Method)
At Java.net.DualStackPlainSocketImpl.socketAccept (dualstackplainsocketimpl.java:131)
At Java.net.AbstractPlainSocketImpl.accept (abstractplainsocketimpl.java:398)
At Java.net.PlainSocketImpl.accept (plainsocketimpl.java:199)
-Locked <0x00000007c0d3a1c8> (a Java.net.SocksSocketImpl)
At Java.net.ServerSocket.implAccept (serversocket.java:530)
At Java.net.ServerSocket.accept (serversocket.java:498)
At Com.intellij.rt.execution.application.appmain$1.run (appmain.java:90)
At Java.lang.Thread.run (thread.java:745)
Locked ownable Synchronizers:
-None
"Service Thread" daemon prio=6 tid=0x000000000d0e5800 nid=0x12d8 runnable [0x0000000000000000]
Java.lang.Thread.State:RUNNABLE
Locked ownable Synchronizers:
-None
"C2 CompilerThread1" daemon prio=10 tid=0x000000000d0d6000 nid=0x2314 waiting on condition [0x0000000000000000]
Java.lang.Thread.State:RUNNABLE
Locked ownable Synchronizers:
-None
"C2 CompilerThread0" daemon prio=10 tid=0x000000000d0d4800 nid=0x728 waiting on
condition [0x0000000000000000]
Java.lang.Thread.State:RUNNABLE
Locked ownable Synchronizers:
-None
"Attach Listener" daemon prio=10 tid=0x000000000d0d4000 nid=0x1b0 waiting on condition [0x0000000000000000]
Java.lang.Thread.State:RUNNABLE
Locked ownable Synchronizers:
-None
"Signal Dispatcher" daemon prio=10 tid=0x000000000d0d1000 nid=0x204c runnable [0x0000000000000000]
Java.lang.Thread.State:RUNNABLE
Locked ownable Synchronizers:
-None
"Finalizer" daemon prio=8 tid=0x000000000282c800 nid=0x246c in object.wait () [0x000000000e42f000]
Java.lang.Thread.State:WAITING (on object monitor)
At java.lang.Object.wait (Native Method)
-Waiting on <0x00000007c0684858> (a java.lang.ref.referencequeue$lock)
At Java.lang.ref.ReferenceQueue.remove (referencequeue.java:135)
-Locked <0x00000007c0684858> (a java.lang.ref.referencequeue$lock)
At Java.lang.ref.ReferenceQueue.remove (referencequeue.java:151)
At Java.lang.ref.finalizer$finalizerthread.run (finalizer.java:209)
Locked ownable Synchronizers:
-None
"Reference Handler" daemon prio=10 tid=0x0000000002824800 nid=0x70 in object.wait () [0x000000000e32f000]
Java.lang.Thread.State:WAITING (on object monitor)
At java.lang.Object.wait (Native Method)
-Waiting on <0x00000007c0684470> (a java.lang.ref.reference$lock)
At Java.lang.Object.wait (object.java:503)
At Java.lang.ref.reference$referencehandler.run (reference.java:133)
-Locked <0x00000007c0684470> (a java.lang.ref.reference$lock)
Locked ownable Synchronizers:
-None
"VM Thread" prio=10 tid=0x000000000d093000 nid=0xe4c runnable
GC task thread#0 (PARALLELGC) prio=6 tid=0x000000000275b800 nid=0x120 runnable
GC task thread#1 (PARALLELGC) prio=6 tid=0x000000000275d800 nid=0x510 runnable
GC task Thread#2 (PARALLELGC) prio=6 tid=0x000000000275f000 nid=0x2564 runnable
GC task Thread#3 (PARALLELGC) prio=6 tid=0x0000000002761800 nid=0x244c runnable
"VM periodic Task Thread" prio=10 tid=0x000000000d11a000 nid=0x14e8 waiting on condition
JNI Global references:153
Found One java-level deadlock:
=============================
"Thread-1":
Waiting to lock monitor 0x000000000282afa8 (Object 0x00000007c0b57ee8, a java.lang.String),
Which is held by "Thread-0"
"Thread-0":
Waiting to lock monitor 0x000000000282c238 (Object 0x00000007c0b57f18, a java.lang.String),
Which is held by "Thread-1"
Java stack information for the threads listed above:
===================================================
"Thread-1":
At Com.xwolf.java.thread.ch2.deadlock$2.run (deadlock.java:44)
-Waiting to lock <0x00000007c0b57ee8> (a java.lang.String)
-Locked <0x00000007c0b57f18> (a java.lang.String)
At Java.lang.Thread.run (thread.java:745)
"Thread-0":
At Com.xwolf.java.thread.ch2.deadlock$1.run (deadlock.java:28)
-Waiting to lock <0x00000007c0b57f18> (a java.lang.String)
-Locked <0x00000007c0b57ee8> (a java.lang.String)
At Java.lang.Thread.run (thread.java:745)
Found 1 deadlock.
You can see the deadlock problem in the program, a series of information that has been threaded.
[Java] Jstack viewing deadlock issues