【发布时间】:2014-02-08 10:31:35
【问题描述】:
我正在开发一个应用程序,它允许用户调整几个参数,然后执行可能需要一分钟的计算,然后将结果显示给用户。
我希望用户能够调整参数并重新开始计算,终止当前计算的进度。
另外,从编程的角度来看,我希望能够阻塞直到计算完成或中断,并且能够知道哪个。
在伪代码中,这大致就是我要寻找的:
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();
}
}
添加此功能的最佳方法是什么?或者有没有更好的方法来设计程序来完成所有这些事情?
【问题讨论】:
标签: java multithreading concurrency locks