gpt4 book ai didi

java - 如果我的员工没有重复完成,我该如何停止线程?

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:55:30 25 4
gpt4 key购买 nike

我已经了解了许多关于停止线程的现有答案。我在下面复制了一段典型的代码。

public class HelloWorld {

public static void main(String[] args) throws Exception {
Thread thread = new Thread(new Runnable() {

public void run() {
try {
while (!Thread.interrupted()) {
Thread.sleep(5000);
System.out.println("Hello World!");
}
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
}
}
});
thread.start();
System.out.println("press any key to quit");
System.in.read();
thread.interrupt();
}
}

但是这个解决方案需要在 while 循环代码中检查中断状态。如果我在 run 方法中做的是顺序和单路径的事情,那么我就没有机会检查中断状态两次。例如,我想要停止正在搜索所有磁盘内容的线程,这会花费很多时间。

我怎样才能阻止它?

最佳答案

在你的长时间运行过程中,你必须有一些点可以说 if (!keepRunning) { break; } else { 执行下一个目录/文件(); } 跳出循环。

在您的稻草人示例中,如果您正在搜索磁盘,那么在处理每个文件和目录以包含此检查逻辑之前,您已经在其中找到了一些点。

如果您有一个运行时间非常长的进程,例如加密一个巨大的文件或传输一个非常大的文件,您仍然可以将这些标志检查嵌入到进程中。在此示例中,您将传输字节 block ,在构建要发送的每个 block 之前,您将检查标志条件。一切都必须在某个时候分步完成,您可以在每个步骤之前进行标记检查。除了带有 .sleep() 的人为示例或一些永远等待某事发生的连接逻辑之外,我想不出任何没有长期运行的阶段或步骤的东西。

如果没有您遇到的确切问题,将很难以更具体的方式回答您的问题。显示一些您实际遇到问题的代码。

关于java - 如果我的员工没有重复完成,我该如何停止线程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12833130/

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