public class DeadLocak {
private final Object left = new Object();
private final Object right = new Object();
public void leftRight() throws Exception {
synchronized (left) {
Thread.sleep(2000);
synchronized (right) {
System.out.println("leftRight end!");
}
}
}
public void rightLeft() throws Exception {
synchronized (right) {
Thread.sleep(2000);
synchronized (left) {
System.out.println("rightLeft end!");
}
}
}
public static void main(String[] args) {
final DeadLocak deadLocak = new DeadLocak();
new Thread(new Runnable() {
@Override
public void run() {
try {
deadLocak.leftRight();
} catch (Exception e) {
e.printStackTrace();
}
}
}).start();
new Thread(new Runnable() {
@Override
public void run() {
try {
deadLocak.rightLeft();
} catch (Exception e) {
e.printStackTrace();
}
}
}).start();
}
}
利用jstack -pid 號查看發現