首先看一个导致死锁的例子,再结合例子说明下如何检查死锁,避免死锁的情况
package cn.sw.study.common.test;
/**
* 死锁例子
* Created by shaowei on 2017/1/3.
*/
public class DeadLock {
public static void main(String[] args) {
final Object a = new Object();
final Object b = new Object();
new Thread() {
@Override
public void run() {
try {
synchronized (a) {
System.out.println("T1 got the lock of a");
Thread.sleep(1000);
System.out.println("T1 was trying to get the lock of b");
synchronized (b) {
System.out.println("T1 one win");
}
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}.start();
new Thread() {
@Override
public void run() {
try {
synchronized (b) {
System.out.println("T2 two got the lock of b");
Thread.sleep(1000);
System.out.println("T2 was trying to get the lock of a");
synchronized (a) {
System.out.println("T2 win");
}
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}.start();
}
}