兩個線程在執行的過程中,因爲爭搶資源而造成相互等待的現象,若無外力干涉的情況,無法推進。(此案例來源於網絡)
class HoldLockThread implements Runnable {
private String lockA;
private String lockB;
public HoldLockThread(String lockA, String lockB) {
this.lockA = lockA;
this.lockB = lockB;
}
@Override
public void run() {
synchronized (lockA) {
System.out.println(Thread.currentThread().getName() + "持有:" + lockA + "嘗試獲取:" + lockB);
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
synchronized (lockB) {
System.out.println(Thread.currentThread().getName() + "已經持有:" + lockA + "和" + lockA);
}
}
}
}
public class Main {
public static void main(String[] args) {
String lockA= "lockA";
String lockB = "lockB";
new Thread(new HoldLockThread(lockA, lockB)).start();
new Thread(new HoldLockThread(lockB, lockA)).start();
}
}