在这里我想停止我的线程或杀死我的线程它是在Java层创建的,该线程正在调用JNI函数。有时根据我的应用程序要求,我必须停止此操作JNI函数执行在某些条件下,如果它正在进行,否则不会。
new Thread(new Runnable() {
@Override
public void run() {
// My jni function call, It calls my JNI layer C function.
}
}
现在,当这个线程执行开始并且它在 JNI 级别工作时,我不必担心这一点,但是在某些情况下,从其他类或方法我想停止这个 JNI 工作,那么我怎样才能停止这个线程。
Note:这里我的线程也没有 while 循环,所以我也无法检查某些全局标志变量。
那么,有人知道如何在线程调用任何 JNI 函数而不需要 while 循环时杀死该线程吗?
你不能safely如果线程正在执行本机代码,则中断该线程。即使您的线程有事件循环,您也需要等待它完成本机调用。对您的代码一无所知,我猜想您有一个长时间运行的本机调用,您不希望它阻塞主线程,因此您为该调用创建了一个单独的线程。你没有办法safely中断单个本机调用。这里没有灵丹妙药。无论如何,您都需要更改代码,我的建议是:
- 将单个长本机调用分解为一系列短调用并在 Java 端运行事件循环
- 在本机端内部分解本机调用并在本机端运行事件循环。您的本机接口将需要另一种方法来设置中断标志。
Thread.interrupt() http://docs.oracle.com/javase/1.4.2/docs/api/java/lang/Thread.html#interrupt%28%29对您没有帮助,因为“调用本机函数”不属于 Javadoc 中指定的任何可中断操作。 Java线程将继续运行,只是它中断状态将被设置.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)