java - Java 中使用可杀死线程的多处理

标签 java multithreading

我有一个在 java 中运行不可靠代码的场景(该场景与 this 不同)。我提供框架类,目的是让第三方覆盖名为 doWork() 的基类方法。但是,如果客户端 doWork() 进入 funked 状态(例如无限循环),我需要能够终止工作线程。

大多数解决方案(我发现 this examplethis 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 状态的线程。所以,我有两个问题:

  1. 是否可以在 Java 中启动一个可以可靠终止的线程或 Runnable?或者 Java 是否需要协作多线程才能使线程能够有效地控制系统?

  2. 如果没有,可以采取哪些步骤来传递 Activity 对象,以便代码可以在进程中运行(例如传递 Activity 网络连接),这样我就可以真正杀死它。?

最佳答案

如果您确实不想(或者可能由于需要传递网络连接而无法)生成新进程,则可以在加载该“插件”的类时尝试检测该“插件”的代码。我的意思是更改它的字节码,以便它将包含对某些实用程序方法的静态调用(例如 ClientMentalHealthChecker.isInterrupted())。其实这并不难做到。在这里您可以找到一些可能有帮助的工具:https://java-source.net/open-source/bytecode-libraries 。它不会是防弹的,因为还有其他方法可以阻止执行。另请记住,客户端代码可以捕获 InterruptedException。

关于java - Java 中使用可杀死线程的多处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30225803/

相关文章:

java - 在 Java 中构建 SQL 字符串的最简洁方法

c# - 一次发送大量数据包时,异步套接字始终读取 0 字节

c# - 从后台线程更新 UI

Java 和泛型

单击按钮后 Java JPanel 似乎不会重新绘制

java - 池化问题 : Item borrowed more than once

.net - 帮助我了解休眠线程的性能和行为

c++ - 锁定函数层次结构

java - list(LinkedList).head 和 Node head 之间的区别?

java - 我无法编辑文本文件中的记录。语言 : JAVA IDE: NETBEANS