Форум программистов, компьютерный форум, киберфорум
Java
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.97/79: Рейтинг темы: голосов - 79, средняя оценка - 4.97
0 / 0 / 0
Регистрация: 16.08.2010
Сообщений: 24

Как дождаться завершения нескольких потоков

21.02.2012, 11:00. Показов 15418. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день. Столкнулся с такой проблемой:
в методе main() создается n одинаковых потоков, каждый из которых обрабатывает по файлу... Каким образом можно реализовать функциональность, когда основной поток (main) ждет завершения ВСЕХ порожденных потоков и только потом продолжает работу... Причем ThreadGroup использовать нельзя (чем то не нравится она нашему quality manager'у).

Заранее большое спасибо.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
21.02.2012, 11:00
Ответы с готовыми решениями:

Дождаться полного выполнения пула потоков
ExecutorService service = Executors.newFixedThreadPool(4); for (int i=0;i<=fileCount;i++) { ...

Ожидание завершения потоков, ExecutorService
Правила так правила. import java.util.Arrays; import java.util.Random; import java.util.concurrent.ExecutorService; import...

Запуск нескольких независимых потоков. Дождаться завершения всех (C++ 11)
Доброго времени суток. Подскажите, как запустить несколько независимых потоков, но дождаться, пока все завершатся? В каждом потоке есть...

4
3 / 3 / 0
Регистрация: 25.08.2010
Сообщений: 213
21.02.2012, 15:28
Thread.join() - посмотри - вроде то
0
0 / 0 / 4
Регистрация: 14.08.2007
Сообщений: 307
21.02.2012, 16:10
Вот набросал пример.
Возможно не самый изщный но работать будет.
Обрати внимание - в конце метода run каждого дочернего Thread должен быть [bold]notifyAll();[/bold]

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
import java.util.Random;
 
public class ThreadTest {
    public static void main(String[] args) {
        int threadCount = 5;
        final Random rand = new Random();
        //
        Thread [] threads = new Thread[threadCount];
        //
        for (int i = 0; i < threadCount; i ++) {
            Thread nextThread = new Thread(new Runnable() {
                public void run() {
                    // some actions ..
                    // for example
                    int sleepSeconds = rand.nextInt(5);
                    try {
                        Thread.sleep(sleepSeconds * 1000);
                    } catch (InterruptedException e) {
                        // do nothing
                    }
                    // Note! here thread will notify about finish of its work
                    System.out.println(Thread.currentThread().getName() + " about to finish");
                    synchronized (this) {
                        notifyAll();
                    }
                }
            });
            //
            nextThread.setName("Thread_" + (i + 1));
            threads[i] = nextThread;
            nextThread.start();
        }
        // waiting while all threads alive
        for (int i = 0; i < threads.length; i++) {
            Thread nextThread = threads[i];
            if (nextThread.isAlive()){
                try {
                    synchronized (nextThread) {
                        nextThread.wait();
                    }
                } catch (InterruptedException e) {
                    // do nothing
                }
            }
        }
        // continue
        System.out.println("Main thread continue work");
    }
}
0
0 / 0 / 4
Регистрация: 14.08.2007
Сообщений: 307
21.02.2012, 16:11
хммм, похоже псевдотег code не работает
0
1 / 1 / 0
Регистрация: 02.08.2011
Сообщений: 64
01.03.2012, 18:05
Пусть есть 100 объектов Thread, которые в настоящий момент запущены и нужно дождаться пока они все завершаться. Предположим для простоты, что ссылки на эти объекты лежат в массиве threads.

Тогда можно легко дождаться всех потоков так:

for ( Thread t : threads )
t.join();
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
01.03.2012, 18:05
Помогаю со студенческими работами здесь

Правильно создать пул потоков, запустить эти потоки одновременно и дождаться их завершения
Добрый день! Подскажите пожалуйста, как правильно создать пул потоков, запустить эти потоки одновременно и дождаться завершения всех...

Как подождать завершения нескольких потоков, и если после минуты не завершились продолжать выполнение?
Как подождать завершения нескольких потоков, и если после минуты не завершились продолжать выполнение программы дальше?

Можно ли ждать завершения одновременно сразу нескольких потоков?
Можно ли ждать завершения одновременно сразу нескольких потоков или выставления нескольких эвентов ? Нечто вроде аналога...

Как дождаться завершения RequestTask?
при создании активити в new RequestTask().execute делаю веб запрос, по результатам которого достраивается интерфейс... т.к. в потоке его...

Как дождаться завершения потока?
void Thread(void* pParam); void main(){ _beginthread(Thread, 0, NULL);//Запускаем поток, он выполняет свои задачи.... //Тут...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru