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對象的鎖
形成死鎖