Вы можете использовать CountDownLatch или CyclicBarrier .
Вы создаете CountDownLatch
и инициализируете его с количеством потоков, которые вы запускаете, затемпередать его в каждую ветку загрузки.Когда поток загрузки завершает свою работу, он вызывает countDown
для защелки.
Вы можете либо вызвать await
для защелки из метода onClick
(но это заблокирует этот поток, которыйзвучит так, как будто вы этого не хотите), или создаете один дополнительный поток, который просто вызывает await
, блокируя ожидание всех потоков загрузки.Как только защелка открыта, вы можете выполнять любые действия, которые вам нужно сделать (например, закрыть диалоговое окно прогресса).
final CountDownLatch latch = new CountDownLatch(10);
for (int i=0;i<10;i++)
download(i, latch);
Thread cleanup = new Thread( new Runnable() {
public void run() {
try{
// This will block
latch.await();
} catch (InterruptedException e ) {
// TODO
e.printStackTrace();
}
takeDownDialog();
whateverElseYouNeedToDo();
}
});
cleanup.start();