哲学家就餐问题java代码
时间: 2023-12-03 13:02:23 浏览: 45
哲学家就餐问题是一个经典的并发编程问题,可以使用Java多线程来实现。以下是一个简单的实现:
```java
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
public class DiningPhilosophers {
private static final int NUM_PHILOSOPHERS = 5;
private static final Philosopher[] philosophers = new Philosopher[NUM_PHILOSOPHERS];
private static final Lock[] forks = new ReentrantLock[NUM_PHILOSOPHERS];
public static void main(String[] args) {
for (int i = 0; i < NUM_PHILOSOPHERS; i++) {
forks[i] = new ReentrantLock();
}
for (int i = 0; i < NUM_PHILOSOPHERS; i++) {
philosophers[i] = new Philosopher(i, forks[i], forks[(i + 1) % NUM_PHILOSOPHERS]);
philosophers[i].start();
}
}
private static class Philosopher extends Thread {
private final int id;
private final Lock leftFork;
private final Lock rightFork;
public Philosopher(int id, Lock leftFork, Lock rightFork) {
this.id = id;
this.leftFork = leftFork;
this.rightFork = rightFork;
}
public void run() {
while (true) {
leftFork.lock();
System.out.println("Philosopher " + id + " picks up left fork");
rightFork.lock(); System.out.println("Philosopher " + id + " picks up right fork");
System.out.println("Philosopher " + id + " eats");
rightFork.unlock();
System.out.println("Philosopher " + id + " puts down right fork");
leftFork.unlock();
System.out.println("Philosopher " + id + " puts down left fork");
}
}
}
}
```