Java Pthread,终止JNI创建的线程
在我们的项目中,有些代码是本机代码,由JNI调用,因此除非我们决定并行运行一些调用,否则一切看起来都很好,但问题是(不清楚的事情)要么通过Java运行线程,要么通过pthread运行线程 我们更喜欢pthread,因为它具有更好的管理和功能,但问题是 假设一个本机代码启动一个pthread,那么我们需要pthread引用,以便用另一个方法取消/退出线程,所以第一个问题是,我如何将pthread id重新解压缩到java代码中,是否可能,pthread id是否为intJava Pthread,终止JNI创建的线程,java,c++,multithreading,java-native-interface,pthreads,Java,C++,Multithreading,Java Native Interface,Pthreads,在我们的项目中,有些代码是本机代码,由JNI调用,因此除非我们决定并行运行一些调用,否则一切看起来都很好,但问题是(不清楚的事情)要么通过Java运行线程,要么通过pthread运行线程 我们更喜欢pthread,因为它具有更好的管理和功能,但问题是 假设一个本机代码启动一个pthread,那么我们需要pthread引用,以便用另一个方法取消/退出线程,所以第一个问题是,我如何将pthread id重新解压缩到java代码中,是否可能,pthread id是否为int native int st
native int start_thread();
下一个问题是,是否可以将Java对象(接口)传递给pthread而不是本机方法?像这样的
native int start_thread(pthread_start ref);//where pthread_start is a java interface with one method, like Runnable
最后一个问题是,一旦获得pthread引用,是否可以将其传递给另一个本机方法以退出/取消它
native void kill_thread(int pthread_id);
只要在本机代码中“新建”pthread\t结构,就可以在Java中存储指向pthread\t结构的指针 有了这个指针,您就可以调用本机代码进行线程管理(join、kill) 同样,在启动线程时,可以传递对Java对象的引用,该引用将作为指针到达本机代码中。虽然我不建议直接从pthread_create调用调用Java函数(即Runnable),但您可以将Java对象指针传递到本机线程例程,本机线程例程反过来可以通过正常的JNI调用调用Java方法