gpt4 book ai didi

java - 在多线程应用程序中缓存 JNI 环境

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:53:57 25 4
gpt4 key购买 nike

我有一个使用多线程的 android 应用程序(例如 ui 线程和网络线程)。现在我希望两个线程都调用 native 函数。还有一些 native 函数将调用 java 函数。

为此需要一个JNIEnv*,它因线程而异。但我认为调用 GetEnv() 效率很低。

有没有办法为每个线程缓存 JNIEnv*,然后确定我们在哪个线程(在 native 函数中)使用正确的缓存 JNIEnv*?

最佳答案

您不能缓存 JNIEnv,应该在缓存的 JVM* 上使用 AttachCurrentThread()。如果 native 线程已经附加,我相信此函数等同于 NOOP。

if ((*jvm)->AttachCurrentThread(jvm, (void **)(&env), NULL) == JNI_OK) {
....
}

关于java - 在多线程应用程序中缓存 JNI 环境,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23195798/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com