多線程(十)---死鎖演示
一、死鎖的場景?
同步鎖嵌套
二、代碼演示
/**
* 同步嵌套,死鎖
*/
class DeadDemo implements Runnable{
private boolean flag;
public DeadDemo(boolean flag) {
this.flag = flag;
}
public void run(){
if (flag) {
synchronized (MyLocked.LOCKED_A){
System.out.println("if---LOCKED_A");
synchronized (MyLocked.LOCKED_B){
System.out.println("if---LOCKED_B");
}
}
} else {
synchronized (MyLocked.LOCKED_B){
System.out.println("else---LOCKED_B");
synchronized (MyLocked.LOCKED_A){
System.out.println("else---LOCKED_A");
}
}
}
}
}
/**
* 同步鎖
*/
class MyLocked{
public static final Object LOCKED_A = new Object();
public static final Object LOCKED_B = new Object();
}
public class DeadLockedDemo {
public static void main(String[] args) {
DeadDemo d1 = new DeadDemo(true);
DeadDemo d2 = new DeadDemo(false);
new Thread(d1).start();
new Thread(d2).start();
}
}
三、原理解釋
互相拿走各自鎖,不能被釋放。
![原理 原理](http://static.javashuo.com/static/loading.gif)