public class AAA implements Runnable {
@Override
public void run() {
while(true){
//同步代碼塊
synchronized ("左手筷子"){
System.out.println("黑格爾搶走了左手筷子");
//同步代碼塊
synchronized ("右手筷子"){
System.out.println("黑格爾搶走了右手筷子");
System.out.println("黑格爾搶走一雙筷子吃了一口飯!");
}
}
}
}
}
public class BBB implements Runnable {
@Override
public void run() {
while(true){
//同步代碼塊
synchronized ("右手筷子"){
System.out.println("叔本華搶走了右手筷子");
//同步代碼塊
synchronized ("左手筷子"){
System.out.println("叔本華搶走了左手筷子");
System.out.println("叔本華搶走一雙筷子吃了一口飯!");
}
}
}
}
}
public class Demo {
public static void main(String[] args) {
//開啓線程
new Thread(new AAA()).start();
//開啓線程
new Thread(new BBB()).start();
}
}
程序運行結果一定是冤家路窄,兩個人分別搶到一根筷子,然後都沒法吃飯了。(死鎖)具體情況如下:
黑格爾搶走了左手筷子
黑格爾搶走了右手筷子
黑格爾搶走一雙筷子吃了一口飯!
黑格爾搶走了左手筷子
黑格爾搶走了右手筷子
黑格爾搶走一雙筷子吃了一口飯!
黑格爾搶走了左手筷子
黑格爾搶走了右手筷子
黑格爾搶走一雙筷子吃了一口飯!
黑格爾搶走了左手筷子
黑格爾搶走了右手筷子
黑格爾搶走一雙筷子吃了一口飯!
黑格爾搶走了左手筷子
黑格爾搶走了右手筷子
黑格爾搶走一雙筷子吃了一口飯!
黑格爾搶走了左手筷子
叔本華搶走了右手筷子