java - 如何强制停止无限循环线程
问题描述
下面是一个代码片段
ExecutorService executor = Executors.newSingleThreadExecutor();
executor.submit(() -> {
while (true) System.out.println("1");
});
executor.shutdown();
executor.shutdownNow();
有什么方法可以从外部关闭执行器?(建议不能改变任务本身) 就像linux中的kill -9
解决方案
有一些方法
- 将附加条件添加到循环条件,例如
boolean shouldContinue
将其设置为 false 将在某个时候退出循环 - 如果您可以编写自己的功能(您拥有应用程序),您可以编写代码来列出所有线程并强制给定线程停止使用
Thread#stop
(不安全)或Thread#interrupt
(更安全)。 - 如果您不拥有该应用程序 - 比如您正在运行一些应用程序 - 您可以使用自定义运行它,
javaagent
这将允许您执行第 2 点中的相同操作。
2 和 3 都与例如 Sockets 的探测器集成,可以允许您在外部已经运行的进程上执行此操作,例如。来自 CLI
推荐阅读
- javascript - 从 localstorage 中的数组中获取项目并使用按钮单独显示它们
- r - 如何根据百分比值创建在观察中着色的表格?
- php - 使用 php 在 D:\wamp\www\controle\exercice8.php 中将数组转换为字符串
- python - Selenium,在 20 页中检查 100 多个框后努力关闭窗口,标准化代码
- entity-framework-core - 如何将“FromSql()”查询的结果建模为基本数据类型?像一个字符串列表?
- docker - 如何在 docker 容器中使用 pwd 设置环境变量
- python - 从 JSON 行文件中提取有用信息
- powershell - 选择多主机 PowerShell
- java - 休眠行未保存到数据库
- r - How to include math symbols in a dplyr tibble character variable?