1. Deadlock Cases
public class DeadLock {
Final Object Locka = new Object ();
public static void Main (string[] args) {
DeadLock demo = new DeadLock ();
Demo.startlock ();
}
public void Startlock () {
Threada a = new Threada (Locka, lockb);
THREADB B = new threadb (Locka, lockb);
A.start ();
B.start ();
}
}
Class Threada extends Thread {
Private Object locka = null;
Private Object lockb = null;
Public Threada (Object A, object B) {
This.locka = A;
THIS.LOCKB = b;
}
public void Run () {
Synchronized (Locka) {
SYSTEM.OUT.PRINTLN ("----Thread a:locked A");
try {
Sleep (3000);
} catch (Interruptedexception e) {
E.printstacktrace ();
}
Synchronized (LOCKB) {
SYSTEM.OUT.PRINTLN ("----Thread a:locked B");
}
}
SYSTEM.OUT.PRINTLN ("----Thread a:finished");
}
}
Class Threadb extends Thread {
Private Object locka = null;
Private Object lockb = null;
Public Threadb (Object A, object B) {
This.locka = A;
THIS.LOCKB = b;
}
public void Run () {
Synchronized (LOCKB) {
SYSTEM.OUT.PRINTLN ("----Thread b:locked B");
try {
Sleep (3000);
} catch (Interruptedexception e) {
E.printstacktrace ();
}
Synchronized (Locka) {
System.out.println ("Tread b:locked A");
}
}
SYSTEM.OUT.PRINTLN ("----Thread b:finished");
}
}
2. Deadlock Analysis
Print Thread Dump
Linux environment kill-3 PID or Jstack
Windows environment ctrl+fn+b
The dump information is as follows:
D:\test\deadlock>java deadlock
----Thread a:locked A
----Thread b:locked B
2018-07-14 17:45:52
Full thread dump Java HotSpot (TM) Client VM (24.65-b04 mixed mode, sharing):
"DESTROYJAVAVM" prio=6 tid=0x02c4bc00 nid=0x1548 waiting on condition [0x00000000]
Java.lang.Thread.State:RUNNABLE
"Thread-1" prio=6 tid=0x02d2b400 nid=0x2b24 waiting for monitor entry [0x054bf000]
Java.lang.Thread.State:BLOCKED (on object monitor)
At Threadb.run (deadlock.java:64)
-Waiting to lock <0x252811c0> (a java.lang.Object)
-Locked <0x252811c8> (a java.lang.Object)
"Thread-0" prio=6 tid=0x02d2ac00 nid=0x3640 waiting for monitor entry [0x0542f000]
Java.lang.Thread.State:BLOCKED (on object monitor)
At Threada.run (deadlock.java:37)
-Waiting to lock <0x252811c8> (a java.lang.Object)
-Locked <0x252811c0> (a java.lang.Object)
"Service Thread" daemon prio=6 tid=0x02cdd800 nid=0x4138 runnable [0x00000000]
Java.lang.Thread.State:RUNNABLE
"C1 CompilerThread0" daemon prio=10 tid=0x02cdc800 nid=0x2324 waiting on condition [0x00000000]
Java.lang.Thread.State:RUNNABLE
"Attach Listener" daemon prio=10 tid=0x02cdac00 nid=0x22dc runnable [0x00000000]
Java.lang.Thread.State:RUNNABLE
"Signal Dispatcher" daemon prio=10 tid=0x02d04800 nid=0x2fb0 waiting on condition [0x00000000]
Java.lang.Thread.State:RUNNABLE
"Finalizer" daemon prio=8 tid=0x02c70000 nid=0x708 in object.wait () [0x050cf000]
Java.lang.Thread.State:WAITING (on object monitor)
At java.lang.Object.wait (Native Method)
-Waiting on <0x25200fc8> (a java.lang.ref.referencequeue$lock)
At Java.lang.ref.ReferenceQueue.remove (referencequeue.java:135)
-Locked <0x25200fc8> (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)
"Reference Handler" daemon prio=10 tid=0x02c6e800 Nid=0xf40 in object.wait () [0x0503f000]
Java.lang.Thread.State:WAITING (on object monitor)
At java.lang.Object.wait (Native Method)
-Waiting on <0x25200db0> (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 <0x25200db0> (a java.lang.ref.reference$lock)
"VM Thread" prio=10 tid=0x02c6d400 nid=0x1150 runnable
"VM periodic Task Thread" prio=10 tid=0x02d16400 nid=0x3130 waiting on condition
JNI Global references:111
Found One java-level deadlock:
=============================
"Thread-1":
Waiting to lock monitor 0x02c73be4 (Object 0x252811c0, a java.lang.Object),
Which is held by "Thread-0"
"Thread-0":
Waiting to lock monitor 0x02c75704 (Object 0x252811c8, a java.lang.Object),
Which is held by "Thread-1"
Java stack information for the threads listed above:
===================================================
"Thread-1":
At Threadb.run (deadlock.java:64)
-Waiting to lock <0x252811c0> (a java.lang.Object)
-Locked <0x252811c8> (a java.lang.Object)
"Thread-0":
At Threada.run (deadlock.java:37)
-Waiting to lock <0x252811c8> (a java.lang.Object)
-Locked <0x252811c0> (a java.lang.Object)
Found 1 deadlock.
Heap
def New Generation Total 4928K, used 867K [0x25200000, 0x25750000, 0x2a750000)
Eden Space 4416K, 19% used [0x25200000, 0X252D8FE0, 0x25650000)
From space 512K, 0% used [0x25650000, 0x25650000, 0x256d0000)
To space 512K, 0% used [0x256d0000, 0x256d0000, 0x25750000)
Tenured generation total 10944K, used 0K [0x2a750000, 0x2b200000, 0x35200000)
The space 10944K, 0% used [0x2a750000, 0x2a750000, 0x2a750200, 0x2b200000)
Compacting Perm Gen Total 12288K, used 157K [0x35200000, 0x35e00000, 0x39200000)
The space 12288K, 1% used [0x35200000, 0x35227730, 0x35227800, 0x35e00000)
Ro space 10240K, 44% used [0x39200000, 0x3967a688, 0x3967a800, 0x39c00000)
RW Space 12288K, 52% used [0x39c00000, 0x3a254170, 0x3a254200, 0x3a800000)
2018-07-22 period Java deadlock small case programming