我有一个 java 线程,它执行一些繁重的数据库操作。我正在编写一个 api 来杀死这个 java 线程。我为此使用了执行器框架,所以一旦我得到未来,我就会调用 future.cancel() 然后检查线程中断。
上述逻辑工作正常,除了线程正在执行 DB 操作的场景,这意味着杀死线程将首先涉及杀死 DB 连接,这意味着 DBA 干预。
我的目标是创建一个不需要支持团队干预的 api。
关于如何解决这个问题的任何想法都将非常有帮助。
代码:
private void killBatches1() {
if (killBatchRunning.compareAndSet(false, true)) {
try{
Iterator<Future<?>> futureIterator = futuresForBatch.iterator();
while (futureIterator.hasNext()) {
Future<?> future = futureIterator.next();
if (future.cancel(true))
;
futureIterator.remove();
}
}finally{
killBatchRunning.set(false);
}
}