2
跨多個JNI調用緩存JNIEnv對象是否安全?例如,我可以這樣做你可以緩存JNIEnv嗎?
void foo(JNIEnv* env)
{
static JNIEnv* cached;
if(! cached)
cached = env;
/* use cached */
}
當然,我在現實中的代碼沒有什麼這個愚蠢的,但上面的例子確實說明使用情況良好。
跨多個JNI調用緩存JNIEnv對象是否安全?例如,我可以這樣做你可以緩存JNIEnv嗎?
void foo(JNIEnv* env)
{
static JNIEnv* cached;
if(! cached)
cached = env;
/* use cached */
}
當然,我在現實中的代碼沒有什麼這個愚蠢的,但上面的例子確實說明使用情況良好。
是的,你可以,但只能在一個線程內。你的緩存不能像上面那樣簡單,除非你確定,不管怎樣,你的本地代碼只能在單個線程上調用。否則,你需要使用線程本地存儲來保存你的JNIEnv引用。
確實。實際上,我將JNIEnv緩存在一個結構體中,並且該結構體只能從創建它的線程中使用。 –