gpt4 book ai didi

java - JAVA中如何避免到处检查线程中断

转载 作者:行者123 更新时间:2023-12-01 22:43:38 25 4
gpt4 key购买 nike

我有两个算法A,B用于计算NP难题的解决方案,这可能需要很多时间。然后在主线程M中我分别为算法A和算法B创建线程A和线程B。当线程A或线程B中的任何一个完成计算或两者都达到超时时,M对那些未完成的线程调用中断。M 对超过 5,000 个测试用例重复此过程。

由于算法A和B没有任何可中断的操作,中断不会引起中断异常,因此这些未完成的线程将继续在后台运行,最终耗尽堆内存,因为越来越多的未完成的线程。

然后我需要在两种算法中手动检查线程的 isInterrupted 。但我不想为了效率和代码可读性而到处检查它们。

例如原来的算法是

public class AlgA {
public void run() {
do1();
do2();
...
do100();
}
}

我不想

public class AlgA {
public void run() throws InterruptedException {
do1();
check();
do2();
check();
...
check();
do100();
}
private void check() throws InterruptedException {
if (Thread.interrupted()) {
throw new InterruptedException();
}
}
}

最佳答案

一种方法可以将中断检查和方法调用包装在某些 util 方法中:

public class AlgA {
protected static void checkAndCall(Runnable action)
throws InterrruptedException {
if (Thread.interrupted()) {
throw new InterruptedException();
}
action.run()
}

public void run() {
checkAndCall(this::do1);
checkAndCall(this::do2);
...
checkAndCall(this::do100);
}
}

关于java - JAVA中如何避免到处检查线程中断,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58480656/

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