0

2つのソースからのコマンドを期待するプログラムがあります。もう1つはソケットインターフェイスで、もう1つはイベントリスナーです。

リスナーを設定した後、プログラムは次のコマンドを呼び出してコマンドを待ちます。

wait();

コマンドは、到着すると、同期メソッドを使用してベクターに追加(最後に追加)されます。このメソッドは、コマンドを追加した後、

notify();

その場合、実行はwait()呼び出しから続行され、最初の要素から開始してコマンドVectorの内容を処理します。機能をテストするために、処理メソッドにThread.sleep(5000)を追加して、処理に少なくとも5秒かかるようにしました。

次に、両方のソースからコマンドを生成しました。

コマンドは、到着した順序で処理されていないことがわかりました。ソケットからのコマンドが最初に到着した場合でも、イベントとして到着したものが最初に処理されることになります。

何が原因でしょうか?私のデザインは壊れていますか?

4

2 に答える 2

1

私には、 BlockingQueueを使用したいように聞こえます。ソースにコマンドを追加させ、ハンドラーにそれらを順番に実行させます。

于 2012-10-19T12:58:21.220 に答える
1

BlockinQueueを使用すると、次のことが可能になります。

  • ブロッキングはありませんが、コマンドの送信者である送信者へのアクセスは制御されています
  • 消費者の待機ポイント、コマンドを安全にポップする機能
于 2012-10-19T12:58:44.703 に答える