当我们使用AttachCurrentThread(JavaVM*vm,void*p_env,void*thr_args)方法将CPP线程附加到Java本机接口(JNI)时,从Java虚拟机(JVM)的Angular 来看,C++线程实际上变成了外部线程.

在将Native CPP线程附加到JVM之后,如果我在附加的线程上执行pthREAD_JOIN,或者如果附加的线程在从JVM分离之前突然终止,会出现问题吗?

我所理解的是,当使用AttachCurrentThread将本机线程附加到JVM时,JVM会分配某些资源并维护内部数据 struct ,以管理线程与Java对象的交互. 如果线程在未正确分离的情况下突然终止,则这些资源可能无法释放,并可能导致内存泄漏或其他资源或JVM相关问题.

enter image description here

在上面的代码中,DeattachCurrentThread变得无法访问,而我已经执行了pthreadExit(),这是否会导致任何与内存泄漏相关的问题或任何其他问题?

推荐答案

使用JNI的AttachCurrentThread方法对已附加到JVM的线程执行pthline_Join是否安全

没有特别的理由不这么认为.与任何其他代码一样,Java和JNI没有更多的方法来干扰线程.

还要注意,JNI规范要求连接到JVM的线程在终止之前再次分离自身.在这样的分离之后,especially没有理由认为线程会表现出与p线程不一致的任何行为.

Java相关问答推荐

我们如何直接使用kerminldap服务票证来通过ldap进行身份验证并形成LDAP上下文

Listview—在Android Java中正确链接项目时出错

在AnyLogic中增加变量计数

Quarkus keycloat配置不工作.quarkus. keycloak. policy—enforcer. enable = true在. yaml表示中不工作

将数组整体转换为链接表

Java记录的不同序列化/反序列化

对于几乎不涉及逻辑的请求,您是否应该使用命令模式?

为什么我的在一个范围内寻找素数的程序不能像S所期望的那样工作

使用Spring和ActiveMQ的侦听器方法引发属性名称不能重复为空警告

对于亚洲/香港,使用ResolverStyle.STRICT的LocalDate.parse返回意外结果

如何从日志(log)行中删除包名称?

在处理2个映射表时,没有更多的数据可从套接字读取

如何在JUNIT测试中覆盖ExecutorService?

在settings.gradle.kts和Build.gradle.kts中使用公共变量

将ByteBuffer异步写入InputStream或Channel或类似对象

如何根据配置动态创建N个bean

在Java中将.GRF转换为图像文件

错误:JOIN/ON的参数必须是boolean类型,而不是bigint类型.Java Spring启动应用程序

使用原子整数的共享计数器并发增量

ExecutorService:如果我向Executor提交了太多任务,会发生什么?