一、死锁的原因
package mian;
import static java.lang.Thread.currentThread;
public class DeadLock {
private final Object MUTEX_READ=new Object();
private final Object MUTEX_WRITE=new Object();
public void read(){
synchronized (MUTEX_READ){
System.out.println(currentThread().getName()+" get READ lock");
synchronized (MUTEX_WRITE){
System.out.println(currentThread().getName()+" get WRITE lock");
}
System.out.println(currentThread().getName()+" release READ lock");
}
}
public void write(){
synchronized (MUTEX_WRITE){
System.out.println(currentThread().getName()+" get WRITE lock");
synchronized (MUTEX_READ){
System.out.println(currentThread().getName()+" get READ lock");
}
System.out.println(currentThread().getName()+" release WRITE lock");
}
}
public static void main(String []args){
final DeadLock deadLock=new DeadLock();
new Thread(()->{
while (true){
deadLock.read();
}
},"read-thread").start();
new Thread(()->{
while (true){
deadLock.write();
}
},"write-thread").start();
}
}
二、交叉死锁结果: