📄 philosopher.java
字号:
class Tool
{
public boolean[] fork;
private final int fork_amount = 5;
Tool()
{
fork = new boolean[fork_amount];
for(int i = 0; i < fork.length; i++)
{
fork[i] = true;
}
}
public synchronized void get(int Philosopher_Number)
{
while((!fork[Philosopher_Number%fork_amount]) || (!fork[(Philosopher_Number + fork_amount - 1)%fork_amount]))
{
try
{
System.out.println("Philosopher"+Philosopher_Number+" 在等待两边的叉子可用。");
this.wait();
}
catch (InterruptedException e)
{
}
}
fork[Philosopher_Number%fork_amount] = false;
fork[(Philosopher_Number + fork_amount - 1)%fork_amount] = false;
System.out.println("Philosopher"+Philosopher_Number+" 两边的叉子可用,"+Philosopher_Number+"拿起两边的叉子开始吃饭了。");
}
public synchronized void put(int Philosopher_Number)
{
fork[Philosopher_Number%fork_amount] = true;
fork[(Philosopher_Number + fork_amount - 1)%fork_amount] = true;
System.out.println("Philosopher"+Philosopher_Number+" 吃完并放下叉子,这时候"+Philosopher_Number+"两边的叉子可以用了。");
this.notify();
}
}
class Philosopher extends Thread
{
private int number;
private Tool cha_zi;
public Philosopher(int number, Tool cha_zi)
{
this.number = number;
this.cha_zi = cha_zi;
}
public void run ()
{
System.out.println("Philosopher"+number + " 肚子饿了。 ");
cha_zi.get(number);
try
{
sleep(1000);
}
catch(InterruptedException e)
{
}
cha_zi.put(number);
System.out.println("Philosopher"+number + " 离开餐桌。");
}
}
class Execute
{
public static void main(String[] args)
{
Tool cha_zi = new Tool();
new Philosopher(0, cha_zi).start();
new Philosopher(1, cha_zi).start();
new Philosopher(2, cha_zi).start();
new Philosopher(3, cha_zi).start();
new Philosopher(4, cha_zi).start();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -