Pthread,杀死JNI创建的线程

时间:2013-11-21 20:39:07

标签: java c++ multithreading java-native-interface pthreads

在我们的项目中,一些代码是本机的,并且由JNI调用,所以除非我们决定并行执行一些调用,否则一切看起来都很好,但问题(不清楚的是)是通过Java运行线程还是并行线程?!

我们更喜欢pthread,因为它有更好的管理和力量,但问题是。

假设本机代码启动了一个pthread,所以我们需要使用pthread引用以便用另一个方法取消/退出该线程,所以第一个问题是,如何将pthread id重新调整为java代码,是可能,pthread id是int吗?

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);

1 个答案:

答案 0 :(得分:0)

您可以将指针存储到Java中的pthread_t结构中,只要您在本机代码中“新”它即可。

使用该指针,您可以回调您的本机代码进行线程管理(加入,终止)。

同样,当您启动线程时,您可以传递对Java对象的引用,该对象将作为指针到达本机代码。虽然我不建议尝试直接从pthread_create调用调用Java函数(即Runnable),但您可以将该Java对象指针传递给本机线程例程,而该例程又可以通过正常的JNI调用来调用Java方法。 p>