2012-04-25 69 views
1

我有一些调用jni层的java代码。JNI回调线程

JNI图层是第三方,所以我无法检查它,但是在某个时候它创建了一个新线程并对java代码进行回调。

在这个回调方法中,我尝试创建另一个java线程并调用线程的启动。然而这个java线程永远不会运行。它像它从来不存在。

从JNI调用线程创建线程是否有问题?

我可以创建一个具有核心大小的threadpoolexecutor,并将任务放在执行程序上,但我想知道为什么我无法在回调中创建线程。

回答

3

您需要在回调内调用AttachCurrentThread(),然后再调用任何其他JNI方法和DetachCurrentThread(),然后退出。

+0

这听起来像一个合理的解决方案,它没有调用这些方法是否会回调JVM仍然工作,但不允许在该回调内创建线程? – madlad 2012-04-25 10:02:44

+0

@ user594950 JNI规范中没有任何内容说明在没有这些方法的情况下它可以工作。 – EJP 2012-04-25 10:19:56

+0

这是有道理的,感谢您的帮助 – madlad 2012-04-25 10:44:59