【问题标题】:Pthread, kill the thread has created by JNIpthread,杀死JNI创建的线程
【发布时间】:2014-05-02 19:06:04
【问题描述】:

在我们的项目中,一些代码是本机的,并由 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);

【问题讨论】:

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


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2011-01-06
      • 1970-01-01
      • 2011-04-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-15
      • 2011-04-19
      • 1970-01-01
      相关资源
      最近更新 更多