
我正在制作windows JNI .dll。 我正在尝试确定JVM是否可以对同一个本地函数进行并发调用。 这是我写的Java代码:
public class TestThreads implements Runnable { public voID run() { MyJNIClass.f(); // Call 'native' static member function } public static voID main(String[] args) { for (int k = 0; k < 20; ++k) new Thread(new TestThreads()).run(); } }
在本地方面,函数MyJNIClass.f()是这样实现的:
#include <jni.h> #include <windows.h> #include <iostream> extern "C" { JNIEXPORT voID JNICALL Java_MyJNIClass_f(jnienv * env,jclass clazz) { std::cout << GetCurrentThreadID() << "," << GetCurrentThread() << std::endl; Sleep(500); } }
本地函数的输出表明所有调用都从相同的Win32线程运行:
5196,0xfffffffe
5196,0xfffffffe
5196,0xfffffffe
5196,0xfffffffe
5196,0xfffffffe
5196,0xfffffffe
5196,0xfffffffe
5196,0xfffffffe
5196,0xfffffffe
…
内存屏障和atomic_t在linux上
在windows 8.1中,线程可能的最大线程数是多less?
从多个线程调用accept()
如何等待循环(C)中的两种types的事件?
如何限制进程数量?
…这些线路中的每一条都会在前一条线路后半秒钟左右popup。
因此,让本机端使用multithreading(如JVM)在本地/ DLL端创build工作线程,然后立即返回的唯一方法就是:!!
无法用文件描述符locking文件
Pythonsubprocess在windows上运行不正常
当中央资源库位于windows文件共享中时,将多个用户使用git是否安全?
PHP curl localhost在发出并发请求时很慢
* _r UNIX调用可重入(asynchronous信号安全),线程安全还是两者兼而有之?
你只有一个是为你创建的“主”的线程。
我怀疑你打算打电话start(); 哪个调用run(); 在新线程中,而不是重用当前线程。
我还要补充,JNI不是序列化的,可以从多个线程中调用。
总结以上是内存溢出为你收集整理的来自不同Java线程的JNI本地调用是否被顺序化?全部内容,希望文章能够帮你解决来自不同Java线程的JNI本地调用是否被顺序化?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)