Pthread,杀死JNI创建的线程

Pthread, kill the thread has created by JNI

本文关键字:线程 创建 JNI 杀死 Pthread      更新时间:2023-10-16

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

我们更喜欢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);

您可以将指向pthread_t结构的指针存储在Java中,只要您在本地代码中"新建"它即可。

使用该指针,您可以回调到用于线程管理(join、kill)的本地代码中。

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