JNI和线程处理

由于Java是一种多线程语言,几个线程可能同时发出对一个固有方法的调用(若另一个线程发出调用,固有方法可能在运行期间暂停)。

此时,完全要由程序员来保证固有调用在多线程的环境中安全进行。例如,要防范用一种未进行监视的方法修改共享数据。

此时,我们主要有两个选择:将固有方法声明为“同步”,或在固有方法内部采取其他某些策略,确保数据处理正确地并发进行。

此外,绝对不要通过线程传递JNIEnv,因为它指向的内部结构是在“每线程”的基础上分配的,而且包含了只对那些特定的线程才有意义的信息。

时间: 2024-08-03 23:04:13

JNI和线程处理的相关文章

如何在android的jni线程中实现回调

JNI回调是指在c/c++代码中调用java函数,当在c/c++的线程中执行回调函数时,会导致回调失败. 其中一种在Android系统的解决方案是: 把c/c++中所有线程的创建,由pthread_create函数替换为由Java层的创建线程的函数AndroidRuntime::createJavaThread. 假设有c++函数: [cpp] view plaincopy void *thread_entry(void *args)   {       while(1)       {    

JVM Bug:多个线程持有一把锁

JVM线程dump Bug描述 在JAVA语言中,当同步块(Synchronized)被多个线程并发访问时,JVM中会采用基于互斥实现的重量级锁.JVM最多只允许一个线程持有这把锁,如果其它线程想要获得这把锁就必须处于等待状态,也就是说在同步块被并发访问时,最多只会有一个处于RUNNABLE状态的线程持有某把锁,而另外的线程因为竞争不到这把锁而都处于BLOCKED状态.然而有些时候我们会发现处于BLOCKED状态的线程,它的最上面那一帧在打印其正在等待的锁对象时,居然也会出现-locked的信息

Android 开发 之 JNI入门 - NDK从入门到精通

NDK项目源码地址 :  -- 第一个JNI示例程序下载 : GitHub - https://github.com/han1202012/NDKHelloworld.git  -- Java传递参数给C语言实例程序 : GitHub - https://github.com/han1202012/NDKParameterPassing.git  --C语言回调Java方法示例程序 : GitHub - https://github.com/han1202012/NDK_Callback.git

c++-C++多线程调用JNI的问题

问题描述 C++多线程调用JNI的问题 在主线程中可以findclass,但是在子线程中却找不到,找的是同一个class,在子线程正可以找到系统的类,比如java/long/String 解决方案 http://blog.csdn.net/booirror/article/details/37778283 这篇文章里,有一些介绍

http服务器-android 通过http和jni底层进行通信

问题描述 android 通过http和jni底层进行通信 android 通过http和jni底层进行通信,jni层相当于一个本地http服务器. 是这样的:一个播放器项目,用到第三方jni插件,这个jni插件相当于本地http流服务器,当应用层发出播放指令和视频地址时,它就会自动连接到这个视频地址 (视频地址能正常播放的)去拉流,并且返回操作结果给应用层.如果操作成功就可以调用播放器进行播放了.... 因为需要频繁和jni服务器进行通信,怎样才能保证正常http通信呢?HttpClient经

JVM 内部运行线程介绍

感谢同事[觉梦]投递此稿. hi,all 最近抽时间把JVM运行过程中产生的一些线程进行了整理,主要是围绕着我们系统jstack生成的文件为参照依据.  前段时间因为系统代码问题,造成性能瓶颈,于是就dump了一份stack出来进行分析.  stack 里面线程非常多,排查起来需要一定的经验,所以,对它们有一定了解,可以提高排查问题的效率.  现在网上资料也不是特别全,所以,导致很多新人在拿到一个stack文件之后,也不知知道从何看起. 下面我把这次整理的一些个人认为比较常见的线程列出来. 线程

代码-求助各位大神LIstfragment中,分线程获取数据后刷新界面崩溃,用分线程加载数据后

问题描述 求助各位大神LIstfragment中,分线程获取数据后刷新界面崩溃,用分线程加载数据后 如题:代码如下,要在viewpager中的一个fragment中加载一个listview,用分线程加载数据后,handleMessage给成员变量的集合赋值后,notify,会直接崩溃 /** 报警图片 */ public class AlarmPhotoFragment extends ListFragment { private int mType = 0; private ListView

JNI/NDK开发指南(十一)——JNI异常处理

转载请注明出处:http://blog.csdn.net/xyang81/article/details/45770551 异常简介 异常,显而意见就是程序在运行期间没有按照正常的程序逻辑执行,在执行过程当中出现了某种错误,导致程序崩溃.在Java中异常分为运行时异常(RuntimeException)和编译时异常,在程序中有可能运行期间发生异常的逻辑我们会用try-catch-来处理,如果没有处理的话,在运行期间发生异常就会导致程序奔溃.而编译时异常是在编译期间就必须处理的.本章主要介绍运行时

linphone 内部线程分析

以下分析基于我内部修改过的linphone版本. linphone包含了sip协议解析,多媒体编解码和rtp传输等功能,这些功能是通过不同的组件分工合作完成的,下面我就来分析下linphone 生命中出现过的那些线程.   第一个登场的当然是主线程,也就是ui线程,通常可认为是一个Activity,这个Activity主要负责界面的绘制.linphone内核库的初始化以 及功能接口的调用.   第二个线程是sip协议处理线程,在主线程初始化linphone内部库时创建: osip_thread_