Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/376.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
尝试用Java实现餐饮哲学家服务仲裁解决方案_Java_Multithreading_Algorithm_Concurrency - Fatal编程技术网

尝试用Java实现餐饮哲学家服务仲裁解决方案

尝试用Java实现餐饮哲学家服务仲裁解决方案,java,multithreading,algorithm,concurrency,Java,Multithreading,Algorithm,Concurrency,我正在准备一次编程面试,我想我应该尝试一下如何解决这个问题 虽然我能够实现Dijkstra和Tannenbaum的解决方案,但我很难找到问题的服务员和仲裁员解决方案 现在,我所能想到的就是应该有一个water类和一个仲裁者类(这是我实现attemptoeat()和isDoneEating()方法的地方),而在我打算实现的water类中(permissionToEat()方法)。所有类都与Forks的单独类交互,我使用以下代码: public class Fork { private fina

我正在准备一次编程面试,我想我应该尝试一下如何解决这个问题

虽然我能够实现Dijkstra和Tannenbaum的解决方案,但我很难找到问题的服务员和仲裁员解决方案

现在,我所能想到的就是应该有一个water类和一个仲裁者类(这是我实现attemptoeat()和isDoneEating()方法的地方),而在我打算实现的water类中(permissionToEat()方法)。所有类都与Forks的单独类交互,我使用以下代码:

public class Fork {


private final Semaphore semaphore = new Semaphore(1);

private final int numberAroundTable;
private boolean usedFork = false; 

public Fork(int numberAroundTable) {
    this.numberAroundTable = numberAroundTable;

}

public int getNumberAroundTable() {
    return numberAroundTable;
}



//'use' method to try pickup a fork and if successful change usedChopstick to true

public void use(){
    try {
        semaphore.acquire();
        usedFork = true;
    } catch (InterruptedException e) {
        usedFork = false;
    }
}

public void putDown(){
    usedFork = false;
    semaphore.release();
}

public boolean isUsed(){
    return usedFork;
}

}
如果我使用我想到的方法,那么实现服务员和仲裁员解决方案的伪代码应该是什么?我遗漏了什么