我有一个在 java 中运行不可靠代码的场景(该场景与 this 不同)。我提供框架类,目的是让第三方覆盖名为 doWork() 的基类方法。但是,如果客户端 doWork() 进入 funked 状态(例如无限循环),我需要能够终止工作线程。
大多数解决方案(我发现 this example 和 this example )都围绕 volatile boolean 值的循环检查:
while (keepRunning) {
//some code
}
或者检查中断状态:
while (isInterrupted()) {
//some code
}
但是,这些解决方案都没有处理“//some code”部分中的以下内容:
for (int i = 0; i < 10; i++) {
i = i - 1;
}
我理解 thread.stop() 被贬值的原因,显然,运行错误的代码是不可取的,尽管我的情况迫使我运行我无法验证自己的代码。但我发现很难相信 Java 没有某种机制来处理进入 Not Acceptable 状态的线程。所以,我有两个问题:
是否可以在 Java 中启动一个可以可靠终止的线程或 Runnable?或者 Java 是否需要协作多线程才能使线程能够有效地控制系统?
如果没有,可以采取哪些步骤来传递 Activity 对象,以便代码可以在进程中运行(例如传递 Activity 网络连接),这样我就可以真正杀死它。?
最佳答案
如果您确实不想(或者可能由于需要传递网络连接而无法)生成新进程,则可以在加载该“插件”的类时尝试检测该“插件”的代码。我的意思是更改它的字节码,以便它将包含对某些实用程序方法的静态调用(例如 ClientMentalHealthChecker.isInterrupted())。其实这并不难做到。在这里您可以找到一些可能有帮助的工具:https://java-source.net/open-source/bytecode-libraries 。它不会是防弹的,因为还有其他方法可以阻止执行。另请记住,客户端代码可以捕获 InterruptedException。
关于java - Java 中使用可杀死线程的多处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30225803/