怎样在多线程中使用JNI

在JNI层使用多线程进行同步项目昰Eclipse 有喜欢的,可加评论返积分哦

}

如果把 c 里面的代码改写成java 本地代碼便不会出现数组越界情况,用单线程操作也不会,求大神解决

用这个本地java 代码的时候,程序一切正常并不会出现数组越界情况

}

在android开发过程中由于主线程要聚焦于UI交互,为了软件运行流畅必然要用到很多多线程技术而在JNI机制中专门提供了一些避免线程冲突的函数。了解、学习并掌握如何避免線程冲突问题是一个程序猿的必修课下面简单介绍一下JNI与多线程。

在JNI机制中每一个线程进入本地函数(即c语言层)都会分配一个JNIenv对象,即是每个函数中第一个参数*envenv其实是VM的一个代理,通过env可以请求VM实现某些功能就像每个进程都有一个独立的VM一样,每个通过JNI进入c层的線程都会分配一个env代理这个env中包含了线程信息,并且每个线程只有一个全局的、伴随线程周期的env各个线程的env之间彼此独立,当且仅当線程第一次进入JNI时分配env对象该对象一直存在直到线程死掉。之后每次线程再进入时使用原有的env对象

这个env对象类似web开发中session的概念,对每┅个客户端建立一个会话并保存会话中可存放专属用某客户端数据以实现线程冲突。

JNI中只有某些平台支持将变量存入env中对于解决线程沖突问题,JNI提供的思路是加锁以下是JNI对线程加锁的代码:

}

我要回帖

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信