ホストAのスレッドjack
がホストBのRMIメソッドfoo
を呼び出し、そのメソッドでホストBがホストAのメソッドbar
を呼び出した場合、bar
はスレッドjack
によって実行されますか?RMIループバック:同じスレッドですか?
私はそれが別のスレッドになると仮定しますが、理論的には可能かもしれません。
なぜ誰かがそれを望んでいますか?ロックリエントリーは、便利な機能です。
ホストAのスレッドjack
がホストBのRMIメソッドfoo
を呼び出し、そのメソッドでホストBがホストAのメソッドbar
を呼び出した場合、bar
はスレッドjack
によって実行されますか?RMIループバック:同じスレッドですか?
私はそれが別のスレッドになると仮定しますが、理論的には可能かもしれません。
なぜ誰かがそれを望んでいますか?ロックリエントリーは、便利な機能です。
短い答え:これは確かに異なるスレッドになります。
ロングワン:考えてみてください。 jack @ A
ホストがfoo() @ B
ホストを呼び出すと、応答を待ってjack @ A
スレッドがブロックされます。 foo() @ B
呼び出しはjack @ A
はまだ待っていることが保証されているbar() @ A
ときに、それゆえbar()
は、それによって処理されるという方法はありません。
また、サーバー側でRMIクライアント呼び出しを処理するための別のスレッドプールがあります。したがって、おそらくあなたのjack
スレッドは実際にはアプリケーションスレッドであり、RMIはそれにアクセスできません。 foo() @ B
をjack
にコールしない限り、スレッドは外部RMIコール(too callbacks、パニック)によっても開始されました。
"ジャックはスレッドがfoo()応答を待ってブロックされています" - 実際には 'notify'を待ってブロックされていますが、通知されると理論的に言えばバーを実行できます。だから私はそれが可能かもしれないと思った。 –
よくスレッドはOSプロセス内にあります。したがって、異なるJVMを定義している場合、実際のスレッドとは異なります。スレッドは単一のマシン上にしか存在できません。しかし、各スレッドは各RMI呼び出しが完了するのを待つので、それは単一スレッドのように見えます。リモート・メソッド呼び出し
実装は、または別のスレッドで実行してもしなくてもよいリモートオブジェクトをRMIランタイムによってディスパッチ方法で
はい、しかし、私の質問は、1つのVMが自身を介してメソッドを呼び出すことです* *外部VMを介して*。 –
3.2スレッド使用。 RMI ランタイムは、リモートオブジェクト のスレッドへのマッピングのマッピングに関して保証しません。同じ リモートオブジェクト上のリモートメソッド呼び出しが同時に実行される可能性があるため、リモートオブジェクト実装 はその実装がスレッドセーフであることを確認する必要があります。最初の呼び出し元のスレッド、「ジャック」が、リモート呼び出しに結び付けられるように指定されていない、そのようにスレッドに関する保証がないことを言って、明示的にそうhttp://download.oracle.com/javase/6/docs/platform/rmi/spec/rmi-arch3.html
から
、 bar
コールを処理するときにRMIサーバによって 'A'で使用されます。
そして、Thomaszが言うように、jack
が既にブロックしている、とにかく「B」からのリモート呼び出しを処理することはできないだろう。
理論上は可能ですが、実際にはそのように動作するとは思いません。各RMIクライアントは、サーバ上に独自のスレッドを持っています。 –