虚拟机接口指针和对象全局引用
static JavaVM * jvm = NULL;
static jobject jobj = NULL;缓存Java虚拟机接口指针
jint JNI_OnLoad(JavaVM * jvm,void * reserved)
{
jvm = jvm;
return JNI_VERSION_1_4;
}创建一个全局引用
/**
* 初始化全局引用
*/
void nativeInit(JNIEnv * env,jobject obj)
{
if(NULL == jobj)
{
jobj = (* env)->NewGlobalRef(env,obj);
if(NULL==jobj)
{
return ;
}
}
}删除全局引用
/**
* 释放全局引用
*/
void nativeFree(JNIEnv * env,jobject obj)
{
if(NULL != jobj)
{
(* env)->DeleteGlobalRef(env,jobj);
jobj = NULL;
}
}将当前线程附加到Java虚拟机上
void * worker(void *args)
{
int init = 0;
JNIEnv * env;
//附加线程
if((* jvm)->AttachCurrentThread(jvm,&env,NULL)){
return NULL;
}
/////
//剥离线程
(* jvm)->DetachCurrentThread(jvm);
return NULL;
}
创建新线程
pthread_t pthread;
pthread_create(&pthread,NULL,worker,NULL);

本文介绍如何在Java中管理全局引用,并演示了如何创建和删除这些引用。此外,还详细介绍了如何将当前线程附加到Java虚拟机上以及创建新线程的过程。
3308

被折叠的 条评论
为什么被折叠?



