RMI を使用して分散アルゴリズムを実装しています。非常に大きなオブジェクトを送信しているため、RMI がシリアル化されたオブジェクトをネットワーク経由で送信するタイミングについて、ある程度の精度が必要です。
次のメソッドを持つ Remote クラスがあるとします。
class MyServer extends Remote {
public synchronized void foo (Bar bar) {
...
Thread.wait();
...
}
}
現在、MyServer.foo メソッドを呼び出す 2 つ (またはそれ以上) の RMI クライアントがあります。クライアント 1がそれを呼び出すと、Thread.wait()でブロックされます。次に、クライアント 2がfooを呼び出すと、クライアント 1 がまだ同期されているfooメソッドにあるため、ブロックされます。
さて、問題は次のとおりです。クライアント 2呼び出しのbarパラメータがネットワークを介して送信されるのはいつですか。クライアント 2が実際にfooメソッドに入ることができるのは1 回だけ、またはそれがブロックされる前に ?
おまけの質問: これ (オブジェクトが送信される時間) は RMI 仕様によって強制される動作ですか、それとも実装固有ですか?