gpt4 book ai didi

java - 餐饮哲学家实现

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:31:44 24 4
gpt4 key购买 nike

<分区>

我只是想知道这是否是为了解决 java 中的哲学家就餐问题?

import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;

public class MainClass {

public static void main(String[] args) {
Lock forks[] = new ReentrantLock[5];

for(int i = 0; i<5; i++){
forks[i] = new ReentrantLock();
}

Thread p1 = new Thread(new Philosopher(forks[4], forks[0], "first"));
Thread p2 = new Thread(new Philosopher(forks[0], forks[1], "second"));
Thread p3 = new Thread(new Philosopher(forks[1], forks[2], "third"));
Thread p4 = new Thread(new Philosopher(forks[2], forks[3], "fourth"));
Thread p5 = new Thread(new Philosopher(forks[3], forks[4], "fifth"));

p1.start();
p2.start();
p3.start();
p4.start();
p5.start();
}
}

和我的哲学课:

import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;

public class Philosopher implements Runnable {

Lock leftFork = new ReentrantLock();
Lock rightFork = new ReentrantLock();
String name;

public Philosopher(Lock leftFork, Lock rightFork, String name) {
this.leftFork = leftFork;
this.rightFork = rightFork;
this.name = name;
}

@Override
public void run() {

while(true){
think(name);
eat(leftFork, rightFork, name);
}
}

private void eat(Lock leftFork, Lock rightFork, String name){
leftFork.lock();
rightFork.lock();

System.out.println(name + " eating...");

try {
Thread.sleep(3000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
finally{
leftFork.unlock();
rightFork.unlock();
System.out.println(name + " done eating...");
}
}

private void think(String name){
System.out.println(name + " thinking...");

try {
Thread.sleep(100);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

}

感觉应该有更多的..代码。但是我已经运行了这个程序,它完成了问题要我解决的问题。任何时候只有两个哲学家在吃饭,否则他们在思考。

我有这个权利吗?

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com