我們需要實現一項功能,允許我們取消未來的工作。鑑於這項工作正在進行數據庫調用,並且我們需要回滾\清除取消之前發生的任何更新。取消異步呼叫
這是我已經盡力了,但 「Thread.currentThread()isInterrupted()。」 總是返回false:
ScheduledExecutorService executor = Executors.newScheduledThreadPool(1);
final Future future = executor.submit(new Callable() {
@Override
public Boolean call() throws Exception {
// Do Some DB calls
if (Thread.currentThread().isInterrupted()) {
// Will need to roll back
throw new InterruptedException();
}
return true;
}
});
executor.schedule(new Runnable() {
public void run() {
future.cancel(true);
}
}, 1, TimeUnit.SECONDS);
這是實現我們的目標是正確的做法?以及如何知道該作業是否被取消以取消\回滾更改?
您確定取消任務在數據庫作業完成之前已經運行嗎? –
其中一些調用可能需要很長時間才能完成,在這種情況下,線程停留在阻止其他作業啓動的池中。我們希望使用戶能夠取消整個工作,如果它花費了太多時間 – Transient