📄 dining.java
字号:
class ChopStick
{
boolean available;
ChopStick()
{ available=true; }
public synchronized void takeup(int philo_num,String lf)
{
while(!available)
{
try
{
System.out.println("哲学家"+(philo_num+1)+"等待"+lf+"筷子");
wait();
}
catch(InterruptedException e){}
}
System.out.println("哲学家"+(philo_num+1)+"拿起"+lf+"筷子");
available=false;
}
public synchronized void putdown(int philo_num,String lf)
{
System.out.println("哲学家"+(philo_num+1)+"放下"+lf+"筷子");
available=true;
notify();
}
}
class Philosopher extends Thread
{
ChopStick left,right;
int philo_num;
Philosopher(int num,ChopStick l,ChopStick r)
{
philo_num=num;
left=l;
right=r;
}
public void eat()
{
left.takeup(philo_num,"左边");
right.takeup(philo_num,"右边");
System.out.println("哲学家"+(philo_num+1)+"正在进餐");
}
public void think()
{
left.putdown(philo_num,"左边");
right.putdown(philo_num,"右边");
System.out.println("哲学家"+(philo_num+1)+"正在思考");
}
public void run()
{
while(true)
{
eat();
try{ sleep(1000); }
catch(InterruptedException e){}
think();
try{ sleep(1000); }
catch(InterruptedException e){}
}
}
}
public class Dining
{
static ChopStick[] chopsticks=new ChopStick[5];
static Philosopher[] philos=new Philosopher[5];
public static void main(String args[])
{
for(int i=0;i<5;i++)
chopsticks[i]=new ChopStick();
for(int i=0;i<5;i++)
philos[i]=new Philosopher(i,chopsticks[i],chopsticks[(i+1)%5]);
for(int i=0;i<5;i++)
philos[i].start();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -