powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Ожидание завершения потока
12 сообщений из 12, страница 1 из 1
Ожидание завершения потока
    #37943308
denis11111
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день люди!
Такая штука:
Есть некий цикл, которий в каждом своем пробеге запускает поток. Пока работает этот поток, то цикл должен ждать его завершения и только потом переходить ко втому пробегу цикла.
Так же этот поток имеет 10с на все свои дела, если не успел, то он останавливается.

Думал что-то такое:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
 for (int i = 0; i < 10; i++) {
                Thread t = new Thread(new Runnable() {
                    public void run() {
                        // some work...
                    }
                });
                
                t.start();
                t.join(10000);
            }



Но здесь цикл не ждет окончания выполнения потока t, а идет дальше...
...
Рейтинг: 0 / 0
Ожидание завершения потока
    #37943316
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: java
1.
2.
3.
4.
5.
6.
7.
ExecutorService service = Executors.newFixedThreadPool(1);
		
		for(int i =0; i < 10; i++){
			Future<Result> result = service.submit(new Task());
			println(result.get());
		}
		service.shutdownNow();
...
Рейтинг: 0 / 0
Ожидание завершения потока
    #37943323
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
denis11111Так же этот поток имеет 10с на все свои дела, если не успел, то он останавливается.

С точки зрения best practices, поток нельзя остановить через 10 секунд. Он сам может проверить, а не пора ли выйти, и потом закончить свои дела.
Если же поток блокируется, то можно попробовать метод interrupt()

denis11111Но здесь цикл не ждет окончания выполнения потока t, а идет дальше...
Ждет 10 секунд, или когда поток закончится, что наступит раньше.

Что ваш поток делает-то?
...
Рейтинг: 0 / 0
Ожидание завершения потока
    #37943324
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А, забыл про таймаут
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
ExecutorService service = Executors.newFixedThreadPool(1);
		
		for(int i =0; i < 10; i++){
			Future<Result> result = service.submit(new Task());
			try{
				Result item = result.get(10, TimeUnit.SECONDS);
				println(item);
			}catch(TimeoutException te){
				result.cancel(true);
			}
		}
		service.shutdownNow();



И Task должен быть запрограммирован так, чтобы реагировать на interrupt
...
Рейтинг: 0 / 0
Ожидание завершения потока
    #37943327
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
забыл ник,
Да, почти то что нужно, за исключением того, что активные таски не умрут, до своего завершения.
...
Рейтинг: 0 / 0
Ожидание завершения потока
    #37943337
Фотография schwa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Ожидание завершения потока
    #37943340
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowiczзабыл ник,
Да, почти то что нужно, за исключением того, что активные таски не умрут, до своего завершения.
Уже поправился:)
авторExecutorService.html#invokeAll(java.util.Collection, long, java.util.concurrent.TimeUnit)
Немного не то - тут надо выполнять таски последовательно
...
Рейтинг: 0 / 0
Ожидание завершения потока
    #37943346
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
забыл никНемного не то - тут надо выполнять таски последовательно
Так если пул на 1 поток, то и будут последовательно. Не очень понял из доки как тут таймаут влияет. Возможно он глобальный. Поэтому метод не подходит.
...
Рейтинг: 0 / 0
Ожидание завершения потока
    #37943361
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowiczзабыл никНемного не то - тут надо выполнять таски последовательно
Так если пул на 1 поток, то и будут последовательно. Не очень понял из доки как тут таймаут влияет. Возможно он глобальный. Поэтому метод не подходит.

Таймаут глобальный, да и invokeAll не передает мысль что таски должны быть выполнены последовательно, да и таски обычно зависят следующий от предыдущего, иначе зачем их выполнять последовательно? И следовательно на момент запуска invokeAll еще не известны. А так вообще способ конечно оригинальный:)
...
Рейтинг: 0 / 0
Ожидание завершения потока
    #37943364
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
забыл никinvokeAll не передает мысль что таски должны быть выполнены последовательно

Почему? С пулом в 1 поток порядок должен быть фиксирован.


забыл никда и таски обычно зависят следующий от предыдущего, иначе зачем их выполнять последовательно? И следовательно на момент запуска invokeAll еще не известны. А так вообще способ конечно оригинальный:)
Это правильно подмечено. Интересно, можно ли наполнять коллекцию по мере выполнение тасков. :)
...
Рейтинг: 0 / 0
Ожидание завершения потока
    #37943387
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowiczзабыл никinvokeAll не передает мысль что таски должны быть выполнены последовательно

Почему? С пулом в 1 поток порядок должен быть фиксирован.

Ну кто-то может случайно изменить размер пула, и это неочевидно отразится на выполнении программы, имхо такого нельзя допускать. А когда намерение явно выражено в коде, 5 раз подумаешь прежде, чем менять. Ну это мое мнение.
Blazkowiczзабыл никда и таски обычно зависят следующий от предыдущего, иначе зачем их выполнять последовательно? И следовательно на момент запуска invokeAll еще не известны. А так вообще способ конечно оригинальный:)
Это правильно подмечено. Интересно, можно ли наполнять коллекцию по мере выполнение тасков. :)

Нельзя, жавадок прямо об этом говорит

The results of this method are undefined if the given collection is modified while this operation is in progress.
...
Рейтинг: 0 / 0
Ожидание завершения потока
    #37943404
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
забыл никНу кто-то может случайно изменить размер пула, и это неочевидно отразится на выполнении программы, имхо такого нельзя допускать. А когда намерение явно выражено в коде, 5 раз подумаешь прежде, чем менять. Ну это мое мнение.

Ну, это я тоже всё в порядке бреда. Твой вариант, более читаемый, конечно.
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Ожидание завершения потока
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]