локальные и глобальные ссылки
Большинство функций JNI возвращают локальные ссылки. Используйте (*env)->NewGlobalRef(env, xxx) для создания глобальной ссылки.
(*env)->DeleteGlobalRef(env, xxx) уничтожает глобальную ссылку.
Создайте слабую ссылку (*env)->NewWeakGlobalRef(env, xxx)
Определите, действительна ли слабая ссылка: JNI_FALSE == (*env)->IsSampleObject(env, WeakRef, NULL)
синхронизация потоков
Синхронизация по объекту в Java
синхронизированный (объект) {
。。。
}
Реализация собственного кода:
(*env)->MonitorEnter(env, obj);
...
(*env)->MonitorExit(env, obj);
Самостоятельно созданные локальные потоки не могут использовать JNIEnv напрямую. Их можно реализовать путем подключения виртуальной машины для получения JNIEnv.
(*jvm)->AttachCurrentThread(jvm, &env, NULL)
Используйте JNIEnv для вызова связанных методов. . .
(*jvm)->DettachCurrentThread(jvm)