public class DeadLockDemo {
private static String A = "A";
private static String B = "B";
private void deadLock(){
Thread t1 = new Thread(new Runnable() {
@Override
public void run() {
synchronized (A){
try {
Thread.currentThread().sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
synchronized (B){
System.out.println("t1");
}
}
}
});
Thread t2 = new Thread(new Runnable() {
@Override
public void run() {
synchronized (B){
synchronized (A){
System.out.println("t2");
}
}
}
});
t1.start();
t2.start();
}
public static void main(String[] args) {
new DeadLockDemo().deadLock();
}
}
操作系统中,死锁发生的四个条件:
-
互斥条件
一个资源每次只能被一个进程使用 -
占有且等待
一个进程因请求资源而阻塞时,对已获得的资源保持不放 -
不可强行占有
进程已获得的资源,在未使用完成之前,不能强行剥夺 -
循环等待
进程之间形成一种头尾相接的循环等待资源关系