[size=large]這裡是兩種演算法,公用乙個chopstick類:
chopstick類:
[/size]
public class chopstick
public chopstick(string name)
public void setenable(boolean enbl)
public boolean getenable()
/*** 拿起筷子
*/public synchronized void pickup()
this.enable = false;
}catch(exception e)
}/**
* 放下手中的筷子
*/public synchronized void pickdown()
}
[size=large]philosopher類[/size]
public class philosopher extends thread
@override
public void run() catch (interruptedexception e)
system.out.println(this.name+"吃飽了");
rightchopstick.pickdown();
system.out.println(this.name+"放下了右手的筷子"+this.rightchopstick.name);
leftchopstick.pickdown();
system.out.println(this.name+"放下了左手的筷子"+this.leftchopstick.name);}}
[size=large]philosopher2[/size]
public class philosopher2 extends thread
@override
public void run() catch (interruptedexception e)
system.out.println(this.name + "吃飽了");
rightchopstick.pickdown();
system.out.println(this.name + "放下了右手的"
+ this.rightchopstick.name);
leftchopstick.pickdown();
system.out.println(this.name + "放下了左手的"
+ this.leftchopstick.name);
this.withchopstickstatus = this.withoutchopstick;
break;
} else catch (interruptedexception e) }}
}}}
[size=large]dining類[/size]
public class dining catch (interruptedexception e)
}system.out.println(system.currenttimemillis() - starttime);}}
[size=large]dining2類[/size]
public class dining2 catch (interruptedexception e)
}system.out.println(system.currenttimemillis() - starttime);}}
[size=large]
為了防止5位哲學家同時拿筷子,同時等或是同時放下。可以讓哲學家2和4先。
[/size]
哲學家吃飯問題
code include include define people 5 define meat 10 肉塊的數量 static int tman people int n 1 定義n為共吃肉的數量 定義一些需要跟哲學家對應的陣列 static int thinking people 第n個哲學家在...
哲學家吃飯問題2019 8 26
有五個哲學家公用一張餐桌,分別坐在周圍的五張椅子上,在餐桌上有五個碗和五隻筷子,他們的生活方式是交替地進行思考和用餐。平時,乙個哲學家進行思考,飢餓時便試圖拿取其左右最靠近他的筷子,只有在他拿到兩隻筷子時才能進餐,進餐完畢,放下筷子繼續思考。思路 選用互斥鎖mutex,如建立5個,pthread m...
Java 哲學家就餐問題
問題描述 一群哲學家聚在一起就餐,每兩個哲學家之間有一根筷子。每個哲學家需要兩根筷子才能用餐,並且一定是先拿起左手邊的筷子,然後再拿右手邊的筷子。如果所有哲學家在同一時間拿起左手邊的筷子,就有可能造成死鎖。請使用執行緒和鎖,編寫模擬哲學家就餐問題。避免出現死鎖。解法 首先,先不管死鎖,實現哲學家就餐...