2

私のアプリケーションには、複数のスレッドからのデータ要求を処理する (シリアル COM ポートと通信する) シングルトン クラスがあります。そのリクエストが処理されている間、スレッドはwait(). 待機中のすべてのスレッドを起こさずに、データの準備ができたことをスレッドに通知する (そしてデータを送り返す) にはどうすればよいですか?

4

2 に答える 2

3

スレッドごとに1 つのブロッキング キューを作成し、それらをシングルトンに挿入します。何らかの回答が届いたら、適切なスレッドのキューを選択し、offer(E o) メソッドを使用してメッセージをそこに入れます。

take() メソッドを使用したスレッドでは、答えを無限に待つか、タイムボックス化された待機に poll(long timeout, TimeUnit unit) を使用できます。

追加の同時キューを使用して、シングルトンをブロックせずに供給することができます。

于 2013-06-27T22:26:03.793 に答える
2

@Lexandroには良い答えがありますが、要件を満たすより簡単な代替手段(私が理解しているように、スレッドの待機/ブロックは問題ありません)は、静的クラスでメソッドを同期することです。

于 2013-06-28T02:43:55.140 に答える