多線程(十)---死鎖演示

多線程(十)---死鎖演示

一、死鎖的場景?

同步鎖嵌套

二、代碼演示

/**
 * 同步嵌套,死鎖
 */
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();
    }
}

三、原理解釋

互相拿走各自鎖,不能被釋放。

原理

相關文章
相關標籤/搜索