gpt4 book ai didi

java - 确保线程在完成某些任务时完成的最优雅的方法

转载 作者:行者123 更新时间:2023-12-01 16:21:57 26 4
gpt4 key购买 nike

所以当特定的事情发生时我设法结束我的线程,

但是我想保证自己的安全,以防万一我提到的具体事情没有发生,所以我不会在线程内陷入无限循环。

所以我所做的是使用 5 分钟的计时器,以防万一,即使不满足“while”条件,该线程也会以某种方式终止。我是这样做的:

shouldRun = true;
doSomething();

Thread myThread = new Thread(() -> {
long start = System.currentTimeMillis();
long end = start + 60*1000*5;
try {
while (shouldRun && System.currentTimeMillis() < end) {
if (!someCondition()) {
doAnotherThing();
}
}
} catch(Exception e) {
logger.error("Thread has failed while running with an exception error: {} ", e);
}
}).start();

doTaskThatTakesOneMinuteToRun();

shouldRun = false;

上面的逻辑是有效的,但我想知道是否有一种更优雅/专业/正确的方法来实现我正在做的事情,并通过计时来结束线程,如果“while”条件是“shouldRun”永远不会是假,因为之前的方法被卡住了或者什么的。

最佳答案

如果不需要经常运行while循环,可以将其替换为for循环并添加Thread.sleep(millis)。这样,它将运行的时间大致为迭代次数乘以 sleep 时间(如果循环中的其他操作足够快以进行分析)。没有 sleep 的 for 循环似乎更难以预测。

您也可以稍后从代码的其他部分调用 Thread.interrupt() 并检查 Thread.isInterrupted(),但这不会太多与更改 shouldRun 的值不同,并且由于您没有考虑此选项,因此它可能在您的情况下不可行。

关于java - 确保线程在完成某些任务时完成的最优雅的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62246955/

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