停止调用JNI函数的Java线程

 2023-01-20    325  

问题描述

在这里,我想停止线程或杀死在Java层上创建的线程,此线程正在调用JNI函数.有时,根据我的申请要求,我必须在某些情况下在某些情况下停止此 jni函数执行,否则不会.

new Thread(new Runnable() {
    @Override
    public void run() {
         // My jni function call, It calls my JNI layer C function.
         }
   }

现在,当启动此线程执行并在JNI级别进行工作时,我对此不必担心,但是从某种情况下的其他类或方法来看,我想停止此JNI工作,所以我如何停止此线程.

停止调用JNI函数的Java线程

注意:在这里我的线程也没有循环,因此我也无法使用一些全局标志变量检查.

因此,有人对如何杀死线程时是否有任何呼叫JNI功能的想法.

推荐答案

如果执行本机代码,则不能安全地中断线程.即使您的线程有事件循环,您也需要等到完成本机通话为止.对您的代码一无所知,我想您有一个长期运行的本机通话,您不希望它堵塞主线程,因此您为该调用创建了一个单独的线程.您无法安全地中断单个本机呼叫.这里没有银弹.无论如何,您都需要更改代码,我的建议是:

  • 将您的单个长期呼叫分解为一系列简短的电话,并在Java side上跑步活动循环
  • 将本机内部的本机呼叫分解在本地侧,并在本地侧运行事件循环.您的本机接口将需要另一种设置中断标志的方法.

在不会帮助您,因为”调用本机功能”不会属于Javadoc中指定的任何可中断的动作. Java线程将继续运行,只有它是中断状态.

其他推荐答案

最好不要突然杀死线程. C函数分配的资源可能无法释放.

如果C函数正在等待某些内容,则可以触发条件返回并检查错误代码.

其他推荐答案

对于本机”通过JNI调用”或纯Java的代码没有什么特别的,所有IO代码都使用JNI代码,您可以使用普通的Java线程方法将其停止.

只使用Thread.Stop() or Thread.Inturrupt()

以上所述是小编给大家介绍的停止调用JNI函数的Java线程,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对77isp云服务器技术网的支持!

原文链接:https://77isp.com/post/26049.html

=========================================

https://77isp.com/ 为 “云服务器技术网” 唯一官方服务平台,请勿相信其他任何渠道。