0
我正在開發一個應用程序,該程序允許用戶調整幾個參數,然後執行計算,最長可能需要一分鐘,然後將結果顯示給用戶。用於中斷和重新開始計算的併發算法
我希望用戶能夠調整參數並重新開始計算,終止當前計算的進度。
此外,從編程的角度來看,我希望能夠阻止,直到計算完成或中斷,並能夠知道哪些。
在僞代碼,這大致就是我要找:
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();
}
}
添加此功能的最佳方法是什麼?還是有更好的方法來設計程序來完成所有這些事情?
這絕對看起來像我想去的方向,我已經有點工作了,但是我無法取消當前的計算。你能提供一個短代碼樣本嗎? – DanielGibbs