2011-12-28 13 views
6

このリンクは、「それだけ働く」ことを示唆しているようだ:埋め込まれたJVMは独自のを開始するために起こっている、私はそれが可能であるかを確認していないhttp://java.sun.com/docs/books/jni/html/invoke.htmlJNIでCの複数のスレッドからjava関数を呼び出すとどうなりますか?

(かなり遠く下部に7.3の下でネイティブスレッドの取り付け)スレッドは自動的に?または、JNI呼び出しをキューに入れますか?それ以外の場合、同じ仮想マシンへの複数の呼び出しがある可能性があります。私はどのようなスレッドを行うように指示していない?

私は、Javaコードが単純にCコードと同じ呼び出しスレッドで実行される場合、動作するとは想像できます。あれは正しいですか?つまり、Javaでスレッドを行う必要はありません。

+0

リンクした記事に関しては、Javaでスレッドを行う必要はありません。別の質問は、JVMが独自のスレッドを作成するか、元のスレッドを使用するかどうかです(私は後者に賭けています)。 – SJuan76

答えて

4

jvmは独自のスレッドを作成する必要はなく、メソッド呼び出しはそれらを作成するネイティブスレッドで実行されます。 AttachCurrentThreadおよびDetachCurrentThreadは、必要なjvm内部状態管理を処理します。たとえば、ネイティブスレッドをラッピングするJava Threadオブジェクトを作成するなどです。

+0

はい、私はウィキペディアでこれを見つけました。「一旦接続されると、ネイティブスレッドはネイティブメソッド内で実行される通常のJavaスレッドのように機能します。ネイティブスレッドは、自身をデタッチするためにDetachCurrentThread()を呼び出すまで、VMに接続されたままです。 – Blub

0

JVMは、実行する必要がある独自のスレッドを開始します。このスレッドの作成は、JVMを起動することによってトリガーされます。

関連する問題