Java:如何使用JNI函数停止调用一系列C ++函数的Thread?

所以,这是我的情况:

我有一个Java应用程序,它使用来自“JavaToCpp”类的JNI方法将数据数组发送到C ++ DLL。

一旦C ++ DLL收到了所有数据,它就开始对它执行几个操作。

我正在使用新线程运行“JavaToCpp”类,因为我的Java接口在(长)(C ++)过程/子例程期间不会被冻结。

我实现了两个方法来停止工作(C ++)过程/子例程:

  • 第一个“STOP”:正在创建一个将由C ++ DLL读取的文件,以便它可以干净地停止正在运行的过程/子例程。
  • 第二个“KILL”:应该直接关闭/终止正在运行的C ++过程/子程序

问题是,在寻找一段时间之后,我没有找到任何好的技巧来实现它。

因此,如果有人知道如何在程序/子程序运行时杀死一个线程……

在Java中“杀死”线程的唯一方法是不推荐使用的 stop()方法。

在您计划使用它之前,请阅读并理解它被弃用的原因 。 如果你理解它,你将不会使用它。

所以不,没有好方法可以杀死一个线程。 但是你为什么要谈论C ++ 进程 (或者你的意思是程序,即子程序)? 因为如果使用单独的进程(而不是线程)来执行本机部分,则可以轻松地将其停止:使用ProcessBuilder和Process.destroy() 。 使用进程而不是线程来调用本机的东西也有其他优点。 一个好处是不稳定的本机进程不会杀死您的Java进程。

最佳实践方法是使用一个volatile变量,该变量由长时间运行的任务检查以确定何时停止。 您可以使用Thread.currentThread().isInterrupted()标志。

问题是你要杀死的大多数线程,因为它们表现不佳。 在这种情况下,您唯一的选择是终止进程,这通常意味着首先在不同的进程中启动它。