日期:2020/1/15
功能:实现哲学家就餐问题
IDE:Intellij IDEA
package testDemo;
import java.io.*;
import java.util.*;
class Chopstick{
boolean available;
Chopstick(){
this.available = true;
}
public synchronized void takeUp(){
while (!available){
try {
System.out.println("用餐等待中...");
wait();
}catch (InterruptedException e){
}
}
available = false;
}
public synchronized void putDown(){
available = true;
notify();
}
}
class Philosophy extends Thread{
Chopstick left;
Chopstick right;
int ID;
public Philosophy(Chopstick left,Chopstick right,int ID){
this.left = left;
this.right = right;
this.ID = ID;
}
public void eat(){
left.takeUp();
right.takeUp();
System.out.println(ID+"号哲学家正在用餐");
}
public void think(){
left.putDown();
right.putDown();
System.out.println(ID+"号哲学家正在思考");
}
public void run(){
while (true){
eat();
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
think();
try {
Thread.sleep(1000);
}catch (InterruptedException ee){
}
}
}
}
public class Test {
public static void main(String[] args) throws IOException {
int i;
Philosophy[] philosophy = new Philosophy[4];
Chopstick[] chopstick = new Chopstick[4];
for(i=0;i<4;i++){
chopstick[i] = new Chopstick();
}
for(i=0;i<4;i++){
philosophy[i] = new Philosophy(chopstick[i],chopstick[(i+1)%4],i);
}
for(i=0;i<4;i++){
philosophy[i].start();
}
}
}