サーバー側にリクエスト (RequestID 1) を送信し、送信されたリクエストの ack を受信するクライアント側 (Customer など) があります。私のサーバー側(たとえば、SomeStore)はリクエスト1を処理し、顧客に送信してackを受信します(または3回再送信します)。Customer でリッスンしている別のスレッドがあります。顧客のリスナー スレッドを受信すると、キー 1 で HashMap を更新する必要があります。必要なのは、この更新された値をキー 1 で待機して取得することだけです。
スレッドプールからリクエストを送信し、両端で ack を受信するスレッドがあります。両方のスレッドが送信プロセスを実行していることがわかります。リスナー用のスレッドプールもあります。ack を受信した後、メイン スレッドを while ループで待機させると、リスナーの更新が表示されません。(ここでは、wait() では作成できません)。この振る舞いがわかりません。両方のスレッドが機能するべきではありませんか?
実装を変更してみましたが、受信時に別のクラスを作成し、myHashMap.get(key) で this.wait() および myHashMap.set(key, value) で this.notify() と同期しました。常にではなく、数回機能します。私の理解では、どのスレッドが最初にロックを取得するかによって異なります。
他にどのように待って同時に聞くことができますか? 明らかな何かを監視しているのかもしれません... ack の代わりに応答を受け取るのは簡単ですが、私の要求はネットワークで失われます。したがって、ack を使用します。私はすでに ack に Callable<> を使用しています。どんなアイデアでも大歓迎です...