gpt4 book ai didi

java - 用于中断和重新启动计算的并发算法

转载 作者:行者123 更新时间:2023-12-01 13:29:41 25 4
gpt4 key购买 nike

我正在开发一个应用程序,它允许用户调整多个参数,然后执行可能需要长达一分钟的计算,然后将结果显示给用户。

我希望用户能够调整参数并重新开始计算,终止当前计算的进度。

此外,从编程的角度来看,我希望能够阻塞直到计算完成或中断,并且能够知道是哪一个。

在伪代码中,这大致就是我正在寻找的内容:

method performCalculation:
interrupt current calculation if necessary
asynchronously perform calculation with current parameters

method performCalculationBlock:
interrupt current calculation if necessary
perform calculation with current parameters
if calculation completes:
return true
if calculation is interrupted:
return false

到目前为止我所拥有的满足第一种方法,但我不知道如何修改它以添加阻止功能:

private Thread computationThread;
private Object computationLock = new Object();
private boolean pendingComputation = false;

...

public MyClass() {
...

computationThread = new Thread() {
public void run() {
while (true) {
synchronized (computationLock) {
try {
computationLock.wait();
pendingComputation = false;
calculate();
} catch (InterruptedException e) {
}
}
}
}

private void checkForPending() throws InterruptedException {
if (pendingComputation)
throw new InterruptedException();
}

private void calculate() {
...
checkForPending();
...
checkForPending();
...
// etc.
}
};
computationThread.start();
}

private void requestComputation() {
pendingComputation = true;
synchronized (computationLock) {
computationLock.notify();
}
}

添加此功能的最佳方法是什么?或者有没有更好的方法来设计程序来完成所有这些事情?

最佳答案

如果您使用的是 JDK 5 或更早版本,请检查 java.util.concurrent 包。 FutureTask 类似乎符合您的要求:具有阻塞功能的可取消异步计算。

关于java - 用于中断和重新启动计算的并发算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21644895/

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