2012-04-25 115 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