アクティビティを並行して実行するスレッドはほとんどありません。すべてのスレッドが完了した後でのみ、後続のアクティビティに進む必要があります。これを達成する方法はありますか?
5 に答える
join()
Thread クラスのメソッドに注目してください。結合を使用して、あるスレッドが別のスレッドの完了を待機できるようにすることができます。また、他のスレッドが終了するまで待機する時間を指定できるようにオーバーロードされます。結合については、並行性に関する Java チュートリアルの一部として説明されています。
すべてのスレッドに対して、thread.join() を実行します。
http://docs.oracle.com/javase/1.5.0/docs/api/java/lang/Thread.html#join ()
スレッドが完了するまで待機させるために、Thread.join() を使用できます。詳細については、Javadoc を参照してください。
概念的には、問題に対処する方法は、実行しているすべてのスレッドによって参照されるオブザーバーオブジェクトを作成することです。スレッドが完了すると、オブザーバーにタスクを実行したことを通知します。オブザーバーは、この種の通知を受信するたびにカウンターをインクリメントします。カウンターがスレッド数に達すると、これはすべてのスレッドが完了したことを意味します。その後、オブザーバーは最終タスクを開始できます。
それは理論のためです。必要に応じて、そのための組み込みJavaクラスがあります:CountDownLatch
http://docs.oracle.com/javase/1.5.0/docs/api/java/util/concurrent/CountDownLatch.htmlを使用することは、実際には Thread.join() よりも優れていると思います。