gpt4 book ai didi

Java:杀死执行数据库操作的线程

转载 作者:行者123 更新时间:2023-12-01 14:48:34 27 4
gpt4 key购买 nike

我有一个java线程,它执行一些繁重的数据库操作。我正在编写一个 api 来杀死这个 java 线程。 我为此使用执行器框架,因此一旦获得 future,我就调用 future.cancel(),然后检查线程中断。

除了线程正在执行数据库操作的场景之外,上述逻辑工作正常,这意味着杀死线程将首先涉及杀死数据库连接,这意味着 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);
}
}

最佳答案

不要这样做!如果您的线程启动了数据库操作并且您将其终止,则可能会导致数据库出现问题。假设您的线程正在更新数据库,并且您杀死了它。交易完成了吗?是否已做出改变?如果你终止线程,你将不得不进行回滚,因为你说的是​​“繁重的数据库操作”,这可能非常昂贵! (我经历过好几个小时的数据库回滚……我开始讨厌它们)。

从技术上讲,您可以尝试访问操作系统并搜索数据库连接进程并将其终止,但正如我上面所说,这不仅是不好的做法,而且很危险。

所以,我的建议是找到一些方法来以小块的形式执行大型数据库操作,这样您就有更好的响应能力和控制力。

关于Java:杀死执行数据库操作的线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15130368/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com