哲学家就餐问题
问题:一共五个筷子,五个哲学家,同时拿起两个筷子才能进行就餐.哲学家要么进行思考
要么进行就餐.
所以就用一个类来表示筷子Chopstick{里面有两个属性,一个记录筷子ID,一个记录筷子状态}. 用一个Chopstick数组来记录五个哲学家.
/**
* Description:哲学家就餐问题
*
* @Author Fann
*/
public class Dinner implements Runnable {
private volatile Chopstick[] chopsticks; //记录五个筷子
class Chopstick {
Integer id; //记录筷子的id
boolean isTake; //记录筷子的状态
public Chopstick(){
this.id = 0;
this.isTake = false;
}
}
public Dinner(){
this.chopsticks = new Chopstick[5];
for (int i = 0; i < 5; i++) { //五个筷子放到数组的五个位置,然后isTake状态都置为false.
chopsticks[i] = new Chopstick();
chopsticks[i].id = i;
chopsticks[i].isTake = false;
}
}
@Override
public void run() {
while (true){
synchronized (this){
try{
//先得到当前哲学家的id