Android NDK(八):JNI多线程
来源:互联网 发布:cassandra数据库下载 编辑:程序博客网 时间:2024/06/03 21:34
今天来唠唠JNI中关于多线程。多线程,即多个线程同时工作,多线程的问题比较复杂,在实际情况下可能会面临众多的问题。JNI中也提供了一系列函数帮助我们完成多线程交互。博客内容大致分为如下:
1. 同步代码块
2. 等待唤醒
一、同步代码块
如果本地代码要运行在多个线程环境中,可能会面临同时共享资源的情况。这种情况下,为了避免资源占有问题,需要我们进行同步处理。
Java中,JDK为我们提供了synchronized来处理多线程同步代码块。
synchronized (Obj.class) {
// 业务处理
}
本地代码中,JNI提供了两个函数来完成上面的同步:
(1)MonitorEnter:进入同步代码块
(2)MonitorExit:退出同步代码块
上述代码,程序必须先进入obj的监视器,再执行同步代码块中的代码。如果另一个线程已经进入了与这个obj监视器的话,当前线程会阻塞。
如果当前线程在不拥有监视器即没有调用MonitorEnter的情况下,调用MonitorExit,系统会产生一个错误,并抛出异常。所以两个方法必须成对出现。
同样在上述代码中,我们看到了对两个函数的错误检查,因为有可能会执行失败,比如创建监视器时,资源分配不成功等原因。同样,在代码发生异常时,记得调用MonitorExit方法退出同步代码块:
我们可以发现在本地代码中处理同步代码块要比java中复杂的多,所以,尽量用Java来做同步吧,把与同步相关的代码都移到Java中去。
二、等待唤醒
Java中提供了Object.wait、Object.notify和Object.notifyAll来执行多线程的交互操作。但是在JNI中却没有提供与之对应的函数。不过我们可以通过JNI调用Java中的这些函数。
上面代码中,假设我们已经缓存了方法的ID。定义了三个对应的方法来调用Jvm中的wait,notify,notifyAll函数即可。
关于JNI中多线程的介绍就是这些,内容比较浅,但是基本涵盖了要用的方式,还希望大家在实践当中去深刻体会。
- Android NDK(八):JNI多线程
- Android NDK开发(2)----- JNI多线程
- Android NDK开发(2)----- JNI多线程
- Android NDK开发(2)----- JNI多线程
- Android NDK开发(2)----- JNI多线程
- Android NDK开发(2)----- JNI多线程
- Android NDK开发(2)----- JNI多线程
- Android NDK开发(2)----- JNI多线程
- Android NDK开发----- JNI多线程
- JNI/NDK开发指南(八)
- Android NDK(JNI)开发
- android(NDK+JNI)---JNI数据类型
- Android-使用C++实现调用本地方法返回字符串显示在界面上/NDK-JNI开发实例(八)
- Android NDK(JNI)开发入门
- Jni (Android NDK 使用总结)
- Android Studio JNI NDK编程(一)
- Android studio JNI(NDK) 开发
- Android开发之NDK(JNI)
- Java 并发开发:Lock 框架详解
- 华为CodeCraft2017算法结果检查工具(包含测试用例展示)
- 删除链表中倒数第n个节点-LintCode
- iOS UITextField输入限制(中英文混合
- EasyUI使用心得——中文化
- Android NDK(八):JNI多线程
- asp网站在iis7上配制后打不开!在官网看到的结果
- 使用Pyinstaller将python脚本打包成exe文件
- PL/SQL乱码问题PL/SQL打开数据库:数据库名及数据库中文字段都乱码。
- JavaScript入门指南---(八)、响应事件
- TensorFlow实战学习笔记2
- UGUI按钮的几种响应方式
- jQuery学习教程二十五: jQuery
- jsp页面中的非空验证