两个及以上的线程在执行过程中,因为互相争夺资源而造成一种相互等待的现象,如果外力干涉,那么它们都将无法推进下去,如果系统资源充足,进程的资源请求都能够得到满足,死锁出现的可能性就很低,否则就会因争夺有限的资源而陷入死锁。
public class DeadLockDemo implements Runnable {
private final String mutex1;
private final String mutex2;
public DeadLockDemo(String mutex1, String mutex2) {
this.mutex1 = mutex1;
this.mutex2 = mutex2;
}
@Override
public void run() {
synchronized (mutex1) {
System.out.println(Thread.currentThread().getName() + ":持有" + mutex1 + ",尝试获取" + mutex2);
try {
// 睡眠一定时间,给别的线程获取资源,产生冲突
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
synchronized (mutex2) {
System.out.println(Thread.currentThread().getName() + ":持有" + mutex2 + ",尝试获取" + mutex1);
}
}
}
public static void main(String[] args) {
String mutex1 = "mutex1";
String mutex2 = "mutex2";
new Thread(new DeadLockDemo(mutex1, mutex2), "AAA").start();
new Thread(new DeadLockDemo(mutex2, mutex1), "BBB").start();
}
}