java - 在循环中杀死一个非终止进程

标签 java java-threads

我正在使用纯 Java 的“blackBox”处理图像,表示为:

imageOut = imageProcess(imageIn);

这是一个循环:

for (int i = 0; i < 1000; i++) {
    imageOut[i] = imageProcess(imageIn[i]);
}

几乎所有进程都会在 2-5 秒内终止,但少数(可能是 2%)运行了很多分钟,有些似乎没有终止(我不知道为什么)。我想在(比如)30 秒后终止这些,记录病理图像,然后转到下一个。 blackBox 没有 i/o,也无法嵌入 Thread.isInterrupted()

我可以在 30 秒后使用 Thread.stop() 终止进程吗?如果是这样,我该怎么做? [我意识到它已被弃用,但我找不到其他方法。] 或者有没有更好的方法来解决这个问题,而不修改 imageProcess()

本质上,我想将其作为过滤器运行:“拒绝所有处理时间超过 30 秒的图像”。

更新: 跟随 Peter Lawrey,我正在探索 ProcessBuilder

他为 Java >=1.8 发布了一个简单的解决方案,我已经接受了。由于我目前使用的是 Java 1.7,因此我发布了我自己的答案,该答案适用于早期版本中的一个简单案例。

最佳答案

最好的选择是使用 ProcessBuilder 启动一个新流程。当此进程超时时,您可以对其调用 destroy() 并知道所有资源都将被清理。 (临时文件除外)

关于java - 在循环中杀死一个非终止进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32294727/

相关文章:

java - Hibernate查询问题

java - 为什么在关闭连接时抛出异常?

java - JSOUP 解析 XYZ.tor2web.org

java - Java 分析新手,我似乎对线程有疑问

java - 使线程终止并编程结束执行时出现问题

java - 释放所有等待线程

java - 同步方法内的线程中的同步块(synchronized block)会发生什么情况?

java - 我正在寻找使用 app-engine 进行 Java 编程的好读物

java - Java 中 wait() 和 notifyAll() 的行为?

java邮件程序不再发送邮件