負荷の高いデータベース操作を実行する Java スレッドがあります。この Java スレッドを強制終了する API をコーディングしています。これにはエグゼキューター フレームワークを使用しているので、future を取得したら、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);
}
}