多个线程相互等待对方释放资源,导致都无法执行的现象,是一种常见的现象
以下举例并且对代码进行解读
public class A {
private static Object lock1 = new Object();
private static Object lock2 = new Object();
public static void main(String[] args) {
new Thread(){
//Thread并发线程
@Override
public void run(){
synchronized (lock1){
System.out.println("线程1得到了锁1");
//这里synchronized保证同一时刻只有一个线程达到临界区
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
synchronized (lock2){
System.out.println("线程1得到锁2");
}
}
System.out.println("线程1结束了");
}
}.start();
new Thread(){
@Override
public void run(){
synchronized (lock2){
System.out.println("线程2得到了锁2");
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
synchronized (lock1){
System.out.println("线程2得到锁1");
}
}
System.out.println("线程2结束了");
}
}.start();
}
}
//三条线程会同时达到临界区,但是会因为锁的作用,都得到了执行下一步