10 / 10 / 6
Регистрация: 14.03.2011
Сообщений: 392
|
|
1 | |
Ждать завершения ExecutorService09.04.2013, 14:29. Показов 3925. Ответов 12
Метки нет (Все метки)
Добрый день уважаемые форумчане, подскажите пожалуйста...
У меня есть поток, он в свою очередь запускает ExecutorService на 20 потоков... Как мне ждать главным потоком, пока не завершаться все потоки из ExecutorService...
0
|
09.04.2013, 14:29 | |
Ответы с готовыми решениями:
12
Ожидание завершения потоков, ExecutorService Как вызвать приложение и ждать его завершения Multithreading: ExecutorService Потоки ExecutorService |
09.04.2013, 14:44 | 2 |
Executor при запуске задачи (потока) возвращает объект, типа Future
У Future есть метод get(), который ожидает завершения связанной с этим объектом задачи.
0
|
10 / 10 / 6
Регистрация: 14.03.2011
Сообщений: 392
|
||||||
09.04.2013, 14:53 [ТС] | 4 | |||||
А можно немного кодом подсказать ? Надо каждый раз в run потока ExecutorService вызывать Future ?
Добавлено через 44 секунды У меня Runnable... Добавлено через 1 минуту
0
|
09.04.2013, 15:01 | 5 |
Это ничего не меняет. Future все равно возвращается. И его метод get все равно ожидает окончания выполнения задачи.
Добавлено через 1 минуту Используйте метод submit, вместо execute. Он возвращает Future. Складывайте возвращаемые Future в список, и потом когда необходимо ждать - пробегаете по ним и вызываете get.
1
|
10 / 10 / 6
Регистрация: 14.03.2011
Сообщений: 392
|
|
09.04.2013, 15:46 [ТС] | 6 |
execService.execute(new MyRunnable (j, byteMessagesArray, hashtable, id, sourceMsisdn, destinationMsisdn, messageClass, alphabet, esmClass, z) {}); Не получается что то с Future... А как эти Future потом сложить в массив или arraylist ?
0
|
09.04.2013, 15:54 | 7 |
Создать ArrayList перед началом цикла. В цикле вызывать метод ArrayList-a add, в который и передавать Future, возвращенный методом submit.
PS. Я не могу представить себе ситуацию, в которой человеку, который не может пачку объектов сложить в список, понадобилось бы писать сложную многопоточную программу...
0
|
10 / 10 / 6
Регистрация: 14.03.2011
Сообщений: 392
|
|
09.04.2013, 17:02 [ТС] | 8 |
Так ну вроде бы сложил в список... А как теперь ждать то пока они все завершаться ?
Добавлено через 49 минут Перебираю их в цикле, наткнулся на не null, что делать в таком случае ?
0
|
10 / 10 / 6
Регистрация: 14.03.2011
Сообщений: 392
|
||||||
10.04.2013, 10:57 [ТС] | 11 | |||||
В конце потока в finally делаю так:
Добавлено через 1 минуту Mutagen, объяснил, спасибо, теперь хоть понятно стало как работает это...
0
|
10.04.2013, 11:25 | 12 | |||||
Да. Только непонятно зачем у вас там лишний каст к String.
Если ваши задачи - Callable<String>, то Future должен возвращаться такой: . Соответственно вы должны были сделать список типа List<Future<String>>.
У Future есть метод get(), который ожидает завершения связанной с этим объектом задачи.
1
|
10 / 10 / 6
Регистрация: 14.03.2011
Сообщений: 392
|
|
10.04.2013, 19:05 [ТС] | 13 |
Просто были ошибки когда я пытался создать Future и ArrayList, поэтому использовал те решения что предлагал Eclipse... Ну и он добавил...
Формулировку я не понял, если бы вы написали как Mutagen конкретно, сделав упор на то что, когда я вызываю Future.get(); то мой основной поток остановится и будет в этом месте ждать когда придет результат. Но вам тоже спасибо это ведь вы подсказали что использовать для решения мой проблемы...
0
|
10.04.2013, 19:05 | |
10.04.2013, 19:05 | |
Помогаю со студенческими работами здесь
13
ExecutorService - пояснить работу Работа с пулом ExecutorService ExecutorService, ArrayList<Future<>> Последовательный запуск Thread процессов с использованием ExecutorService Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |