JNI的线程处理
来源:互联网 发布:网络赌钱正规吗 编辑:程序博客网 时间:2024/06/05 17:28
《Pro Android C++ with the NDK》学习笔记
- 同步
- 原生线程
JNI技术的一些约束:
1.只在原生方法执行期间及正在执行原生方法的线程环境下局部引用是有效的,局部引用不能在多线程间共享,只有全局引用可以被多个线程共享。
2.被传递给每个原生方法的JNIEnv接口指针在与方法调用相关的线程中也是有效的,它不能被其他线程缓存或使用。
一、同步
JNI的监视器允许原生代码利用Java对象同步,虚拟机保证存取监视器的线程能够安全执行,而其他线程等待监视器对象变成可用状态,例如:
synchronized(obj){/*同步线程安全代码块*/}
在原生代码中相同级别同步可以用JNI的监视器方法实现的,例如:
if(JNI_OK == (*env)->MonitorEnter(env,obj)){/*错误处理*/}/*同步线程安全代码块*/if(JNI_OK == (*env)->MonitorExit(env,obj)){/*错误处理*/}
二、原生线程
为了执行特定任务,这些原生构件可以并行使用原生线程。为了与应用的依然活跃部分交互,衍生线程应该先附着在虚拟机上。
JNI通过JavaVM接口指针提供了AttachCurrentThread函数以便让原生代码将原生线程附着到虚拟机上,例如:
JavaVm* cachedJvm;……JNIEnv* env;……/*将当前线程附着到虚拟机上*/(*cachedJvm)->AttachCurrentThread(cachedJvm,&env,NULL);/*可以用JNIEnv接口实现线程与java应用程序的通信*//*将当前线程与虚拟机分离*/(*cachedJvm)->DetachCurrentThread(cachedJvm);
对AttachCurrentThread函数的调用允许应用程序获得对当前线程有效的JNIEnv接口指针。
阅读全文
0 0
- JNI的线程处理
- JNI回调时线程安全的处理
- JNI异常的处理
- JNI 多线程的处理
- JNI异常的处理
- JNI异常的处理
- jni的异常处理
- JNI分线程在Android上绘图刷新过快容易崩溃的处理
- jni的中文字符串处理
- jni的中文字符串处理
- jni的中文字符串处理
- JNI层数组的处理
- JNI线程
- JNI线程
- jni的使用案例,验证jni中线程是否停止
- Android 线程的处理
- 处理线程的函数
- 线程的同步处理
- Bootstrap分割线
- 修改oracle中内存占用大小
- 上传文件
- “模板类与友元”那些事(C++)
- kotlin 官方学习教程之编码风格
- JNI的线程处理
- Error:SSL peer shut down incorrectly
- android热修复--阿里热修复使用和源码分析
- 数据、结构、算法
- 细谈C++的运算符重载
- 我为什么鼓励工程师写blog
- oracle 常用的 sql
- UVa232 Crossword Answers AC
- Universial-imageloader的cache原理