哲学家进餐问题代码

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

哲学家进餐问题代码(JAVA)

(2010-10-12 15:24:12)

转载

标签:

分类:Java

it

问题描述:

一个哲学家围坐在一张圆桌周围,每个哲学家面前都有一碟通心面。由于面条很滑,所以

要两把叉子才能夹住。相邻两个碟子之间有一把叉子。

哲学家的生活包括两种活动:即吃饭和思考。当一个哲学家觉得饿时,他就试图分两次去

取他左边和右边的叉子,每次拿一把,但不分次序。如果成功地获得了两把叉子,他就开

始吃饭,吃完以后放下叉子继续思考。

问题是:

为每一个哲学家写一段程序描述其行为。要求不能死锁。

class kuai{

String name;

boolean Enable = true;

public kuai(String name)

{

= name;

}

public synchronized void pickup()

{

this.Enable =false;

}

public synchronized void putdown()

{

this.Enable =true;

this.notifyAll();

}

}

class Philosopher extends Thread

{

String name;

kuai left;

kuai right;

public Philosopher(String name, kuai l, kuai r) {

= name;

left = l;

right = r;

}

public void run()

{

if(left.Enable)

{

left.pickup();

}

else

{

while(!left.Enable)

{

try

{

System.out.println(name + " 在等待 "+);

Thread.sleep(500);

}catch (InterruptedException e)

{

e.printStackTrace();

}

}

}

System.out.println(name + " 眼明手快,以迅雷不及掩耳之势一把抓起"+);

try

{

Thread.sleep(500);

}catch (InterruptedException e)

{

e.printStackTrace();

}

if(right.Enable)

{

right.pickup();

}

else

{

while (!left.Enable)

{

try

{

System.out.println(name + "在等待 "+);

Thread.sleep(500);

}catch (InterruptedException e)

{

e.printStackTrace();

}

}

}

System.out.println(name + " 眼明手快,以迅雷不及掩耳之势一把抓起"+);

System.out.println(name + " 左右开弓,狼吞虎咽起来");

try

{

Thread.sleep(2000);

}catch (InterruptedException e)

{

e.printStackTrace();

}

System.out.println(name + " 酒足饭饱,打了个饱嗝,心满意足的放下了"++" 和 " +);

left.putdown();

right.putdown();

}

}

public class Eat1

{

public static void main(String args[])

{

kuai k1 = new kuai("筷子1号");

kuai k2 = new kuai("筷子2号");

kuai k3 = new kuai("筷子3号");

kuai k4 = new kuai("筷子4号");

kuai k5 = new kuai("筷子5号");

Philosopher p1 = new Philosopher("老大", k1, k2); Philosopher p2 = new Philosopher("老二", k2, k3); Philosopher p3 = new Philosopher("老三", k3, k4); Philosopher p4 = new Philosopher("老四", k4, k5); Philosopher p5 = new Philosopher("老幺", k5, k1); p1.start();

p2.start();

p3.start();

p4.start();

p5.start();

}

}

相关文档
最新文档