Java 你能缓存JNIEnv吗?
跨多个JNI调用缓存JNIEnv对象安全吗?例如,我可以做一些类似的事情吗Java 你能缓存JNIEnv吗?,java,java-native-interface,Java,Java Native Interface,跨多个JNI调用缓存JNIEnv对象安全吗?例如,我可以做一些类似的事情吗 void foo(JNIEnv* env) { static JNIEnv* cached; if( ! cached ) cached = env; /* use cached */ } 当然,实际上我的代码并没有这么傻,但上面的示例确实很好地演示了用例。是的,您可以,但只能在单个线程中。您的缓存不能像上面那样简单,除非您以某种方式确定您的本机代码将只在单个线程上被调用。否则
void foo(JNIEnv* env)
{
static JNIEnv* cached;
if( ! cached )
cached = env;
/* use cached */
}
当然,实际上我的代码并没有这么傻,但上面的示例确实很好地演示了用例。是的,您可以,但只能在单个线程中。您的缓存不能像上面那样简单,除非您以某种方式确定您的本机代码将只在单个线程上被调用。否则,您需要使用线程本地存储来保存JNIEnv引用。的确如此。我实际上是在一个结构中缓存JNIEnv,并且该结构将仅从创建它的线程中使用。