Java的死锁Demo
当线程t1持有独占锁A,并尝试去获取独占锁B的同时,线程t2持有独占锁B,并尝试获取独占锁A的情况下,就会发生AB两个线程由于互相持有对方需要的锁,而发生的阻塞的现象,我们称为死锁。
/**
* 死锁示例
*/
public class DeadLockDemo {
//创建两个静态对象
private static Object A=new Object();
private static Object B=new Object();
public static void main(String[] args) {
//线程t1中
new Thread(()->{
//抢占资源A对象
synchronized (A){
try {
TimeUnit.SECONDS.sleep(1);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("执行线程t1,并在A中调用B");
//此处需要获取B对象,但是t2独占锁(未释放)--->相互竞争资源--->死锁
synchronized (B){
System.out.println("线程t1中,A中调用B");
}
}
},"t1").start();
//线程2中
new Thread(()->{
//抢占资源B对象
synchronized (B){
System.out.println("执行线程t2,并在B中调用A");
//此处需要获取A对象,但是t1独占锁(未释放)--->相互竞争资源--->死锁
synchronized (A){
System.out.println("线程t2中,B中调用A");
}
}
},"t2").start();
}
}