Как сделать так, чтобы потоки выполнялись поочередно, то есть следующий поток не начинался раньше завершения предыдущего?
Примечание: вызываю метод, который в отдельном потоке скачивает файлы из интернета.
for(int i = 0; i < l; i++) {
downloadFile(metadata.getDriveId().encodeToString(), metadata.getTitle());
}
public void downloadFile(String id, final String name) {
new Thread() {
@Override
public void run() {
// скачивание
}
}.start();
}
Ответ
Thread.join() заставляет текущий поток ждать завершения другого. При этом работа текущего потока будет остановлена и это равнозначно тому, чтобы просто запускать все задачи в одном потоке.
Если вам нужно N потоков запускать поочередно и не ждать их в основном потоке (из которого запускаете), посмотрите на java.util.concurrent.Executors.newSingleThreadExecutor()
Этот метод выдает вам ExecutorService, способный принимать (submit) любое количество задач (Runnable) и последовательно по одной их выполнять.
Вы также можете отдавать не Runnable, a Callable. Тогда sumbit возвращает Future, который может вам пригодиться, чтобы получить какие-то данные о скачанном файле.
Комментариев нет:
Отправить комментарий