JNI限制:
There are certain constraints that you must keep in mind when writing nativemethods that are to run in a multithreaded environment. By understanding and programming within these constraints, your native methods will execute safely no matter how many threads simultaneously execute a given native method. Forexample:
A JNIEnv pointer is only valid in the thread associated with it. You must not pass this pointer from one thread to another, or cache and use it in multiplethreads.
The Java virtual machine passes a native method the same JNIEnv pointer in consecutive invocations from the same thread,but passes different JNIEnv pointers when invoking that native method fromdifferent threads. Avoid the common mistake of caching the JNIEnv pointer ofone thread and using the pointer in another thread.
Local references are valid only in thethread that created them. You must not pass local references from one thread toanother. You should always convert local references to global referenceswhenever there is a possibility that multiple threads may use the samereference.
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/lovingprince/archive/2008/08/19/2793504.aspx
你必须意识到,编写的本地函数是运行到多线程环境里面的。通过理解和编程的限制,你的本地函数执行绝对安全,不管多少线程同时执行一个本地接口。例如,jnienv指针是线程有效的,不能讲这个指针传递给另一个线程、cache使用,或者在多线程环境里面使用。
java虚拟机