天天看點

Java: 寫一個死鎖的程式

package com.example.app;

public class DeadLockTest {
    public static void main(String[] args) throws Exception {

        Thread t1=new Thread(new Runnable() {
            @Override
            public void run() {
                A.test();
            }
        },"Thread-A");

        Thread t2=new Thread(new Runnable() {
            @Override
            public void run() {
                B.test();
            }
        },"Thread-B");

        t1.start();
        t2.start();

        t1.join();
        t2.join();



    }
}

class A{

    public static synchronized void test(){
        System.out.println("test function in class A......");
        try {
            Thread.sleep(1000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        B.test();
    }

}

class B{
    public static synchronized void test(){
        System.out.println("test function in class B......");
        try {
            Thread.sleep(1000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        A.test();
    }

}
      

分析:

Thread-A 持有類A的class對象的鎖,等待類B的class對象的鎖

Thread-B 持有類B的class對象的鎖,等待類A的class對象的鎖

形成死鎖