首页 > 解决方案 > 如何强制停止无限循环线程

问题描述

下面是一个代码片段

ExecutorService executor = Executors.newSingleThreadExecutor();

executor.submit(() -> {
    while (true) System.out.println("1");
});
executor.shutdown();
executor.shutdownNow();

有什么方法可以从外部关闭执行器?(建议不能改变任务本身) 就像linux中的kill -9

标签: javamultithreading

解决方案


有一些方法

  1. 将附加条件添加到循环条件,例如boolean shouldContinue将其设置为 false 将在某个时候退出循环
  2. 如果您可以编写自己的功能(您拥有应用程序),您可以编写代码来列出所有线程并强制给定线程停止使用Thread#stop(不安全)或Thread#interrupt(更安全)。
  3. 如果您不拥有该应用程序 - 比如您正在运行一些应用程序 - 您可以使用自定义运行它,javaagent这将允许您执行第 2 点中的相同操作。

2 和 3 都与例如 Sockets 的探测器集成,可以允许您在外部已经运行的进程上执行此操作,例如。来自 CLI


推荐阅读