2012-04-25 4 views
1

私はjniレイヤーを呼び出すJavaコードをいくつか持っています。JNIコールバックスレッド

JNIレイヤーはサードパーティーなので、調べることはできませんが、ある時点で新しいスレッドが作成され、Javaコードへのコールバックが行われます。

このコールバックメソッドの中で、別のJavaスレッドを作成してスレッドでstartを呼び出します。ただし、このJavaスレッドは実行されません。そのような存在は決してありません。

JNIコールからスレッドを作成すると問題が戻ってきますか?

コアサイズのthreadpoolexecutorを作成し、その代わりにexecutorにタスクを置くことができますが、コールバック内でスレッドを作成できない理由を知りたいと思います。

答えて

3

他のJNIメソッドを呼び出す前にコールバック内でAttachCurrentThread()を呼び出し、終了する前にDetachCurrentThread()を呼び出す必要があります。

+0

これは妥当な解決策のようですが、これらのメソッドは呼び出されず、JVMへのコールバックはまだ機能しますが、そのコールバック内のスレッドの作成はできません。 – madlad

+0

@ user594950 JNI仕様には、これらのメソッドがなくても動作することは何もありません。 – EJP

+0

それは意味があります、助けてくれてありがとう – madlad