假如宿舍只剩一雙鞋,這時候小明和小朋兩個人都要出去,兩個人一個拿到了左腳鞋子,一個人拿到了右腳鞋子,可是誰也不讓給誰,於是乎就造成了死鎖現象,誰也別出去了。
package com.nxw.Thread.dieLock;
public class DieLock{
public static void main(String[] args) {
Runnable xiaoming = new Runnable() {
public void run() {
synchronized (Shoes.left){
System.out.println("小明拿到了左腳鞋子");
synchronized (Shoes.right){
System.out.println("小明拿到了右腳鞋子,他可以穿鞋子走人了。。。");
}
}
}
};
Runnable xiaopeng = new Runnable() {
public void run() {
synchronized (Shoes.right){
System.out.println("小朋拿到了右腳鞋子");
synchronized (Shoes.left){
System.out.println("小朋拿到了左腳鞋子,他可以穿鞋子走人了。。。");
}
}
}
};
Thread thread1 = new Thread(xiaoming,"小明");
Thread thread2 = new Thread(xiaopeng,"小朋");
thread1.start();
thread2.start();
}
}
class Shoes {
public static String left = "leftShoes";
public static String right = "rightShoes";
}
為了方便貼程式碼,都寫到一個類裡面了。
多執行幾次你就會發現,當小明和小朋正好一個搶到一個鞋子的時候,死鎖就出現了。
所以我們在工作當中操作多執行緒的時候一定要注意避免死鎖的情況發生!