別のコンポーネント(別のスレッドで実行中)から特定のイベントを待つためにCountDownLatchを使用します。次のアプローチは、私のソフトウェアの意味に合うだろうが、私は私が期待通りに動作するかどうかわからない:タイムアウトでCountDownLatch.await(int)を複数呼び出す
mCountDownLatch.await(3000, TimeUnit.MILLISECONDS)
otherComponent.aStaticVolatileVariable = true;
mCountDownLatch.await(3500, TimeUnit.MILLISECONDS);
... <proceed with other stuff>
シナリオでは、次のようになります。私は、3秒間待ち、ラッチがある場合0にカウントダウンされていない場合は、その変数で他のコンポーネントに通知してから、最大3.5秒待機します。もう一度タイムアウトがあれば、私は気にせず、他の操作を進めます。
注:私はそれがそうではないことを知っていますが、上記のシナリオは私のソフトウェアで全く合理的かつ有効です。
私はawait(int、TimeUnit)とCountDownLatchのドキュメントを読んだが、私はJava/Androidの専門家ではないので、確認が必要です。私には、すべてのシナリオが有効になります:
- 最初のawaitが成功した場合、もう一方が出て最初のawait時間は、その後、他のawaitがまだ有効である場合
- すぐに戻ります待ちます。 他のスレッドが静的な信号に気付いた場合、したがって、第二 のawaitが正常に
- の両方が通話時間を待つ返すことがあります(これは私のソフトウェアのセマンティクスに応じて結構です)
私は(のawaitを使用しています。.. 。)正しく?同じオブジェクトの前の待っている(...)がタイムアウトしても、上記の方法で(...)秒待つことができますか?
感謝の要因によって減少しているが。実際、私の質問はこれよりはるかに簡単でしたが、私が正しいとすれば、実際には私の前提が正しいことが証明されました。私の中心的な質問はこれだけでした:オブジェクトが最初に待たされたとき(**)、同じオブジェクトに対してもう一度await()を呼び出せますか?私はそう思うが、私が言ったように、私はJavaの専門家ではない。 (私が最後の確認を得た後、私は必要以上のものであるため、あなたの返答を確かに答えにします。) –
正直言って、私は100%私の頭、そしてそのような答えを見つける最善の方法は、それを試すことです。したがって、テスト:) –