我有一些调用jni层的java代码。
JNI层是第三方,因此我无法对其进行检查,但在某些时候它会创建一个新线程并对java代码进行回调。
在这个回调方法中,我尝试创建另一个java线程并在线程上调用start。但是这个java线程永远不会运行。它就像从未存在过。
从JNI创建线程回拨问题吗?
我可以创建一个具有核心大小的threadpoolexecutor并将任务放在执行程序上,但我想知道为什么我不能在回调中创建线程。
答案 0 :(得分:3)
在调用任何其他JNI方法之前,您需要在回调内部调用AttachCurrentThread()
,并在退出之前调用DetachCurrentThread()
。