我有一个类似于解释器的 GUI。它允许用户在 Jython 中编写脚本(用 Java 实现 Python)并在需要时运行它。除此之外,我还希望允许用户在需要时立即终止运行。
问题是,我真的不知道该怎么做。该脚本正在另一个线程上运行,但我不知道有任何安全的方法可以在其运行过程中停止/中断/终止线程,更不用说不知道线程/脚本正在运行什么(它可能是一项简单的任务,也可能是对数据库的某种繁重的 SQL 查询,而数据库是需要仔细处理资源的东西)。
我怎样才能立即终止这种按需运行?
我有一个类似于解释器的 GUI。它允许用户在 Jython 中编写脚本(用 Java 实现 Python)并在需要时运行它。除此之外,我还希望允许用户在需要时立即终止运行。
问题是,我真的不知道该怎么做。该脚本正在另一个线程上运行,但我不知道有任何安全的方法可以在其运行过程中停止/中断/终止线程,更不用说不知道线程/脚本正在运行什么(它可能是一项简单的任务,也可能是对数据库的某种繁重的 SQL 查询,而数据库是需要仔细处理资源的东西)。
我怎样才能立即终止这种按需运行?
不幸的是,没有安全的方法可以立即安全地终止线程。这就是不推荐使用 Thread.stop 的部分原因。
这是一个复杂的问题,它实际上取决于你的线程是如何工作的。不存在针对所有线程执行此操作的通用解决方案。听起来您的线程不在循环中,因此在循环上轮询变量是行不通的。但你也许可以改变:
MyThread extends Thread {
PythonProcess p;
void run() {
p = startPython();
}
void stopMe() {
p.halt();
}
}
作为最后的手段,您仍然可以使用已弃用的 Thread.stop,但它是不安全的,应尽可能避免使用。除此之外,也许您可以进行进程分叉并在操作系统级别手动处理它,但这不是很像 java。