Задачу решила, но логику вывода понять не могу.
Вывод:
Horse_09 has finished the race!
Horse_03 has finished the race!
Horse_02 has finished the race!
Horse_01 has finished the race!
Horse_04 has finished the race!
Horse_08 has finished the race!
Waiting forHorse_05
Horse_05 has finished the race!
Waiting forHorse_06
Horse_07 has finished the race!
Horse_10 has finished the race!
Horse_06 has finished the race!
В коде есть такая часть:
for (Horse hrs : horses) {
if (hrs.isFinished() == false) {
System.out.println("Waiting for " + hrs.getName());
hrs.join();
То есть, если лошадь не финишировала, мы ее ждём, а потом двигаемся к следующей. Тогда почему после вывода на экран "Waiting forHorse_06" следующая строка не "Horse_06 has finished the race!". Ведь метод join заставляет нас выполнять только одну нить, как успела вывестись надпись "Horse_07 has finished the race!
Horse_10 has finished the race!"?
Надежда
17 уровень
Не могу понять вывод на экран.
Архивный
Комментарии (2)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
dionisis2010
14 июля 2019, 22:36решение
в программе есть 11 потоков : 10 бегущих лошадей (дочерние потоки) и 1 который считает их количество (main).
main берет каждую лошадь по списку и проверяет финишировала ли она, если не финишировала, то ждет пока пока финиширует (метод join), но ждет только main, все остальные потоки работают в штатном режиме. Ничего не мешает им перехватить контроль и вывести информацию пока main ждет.
сообщения о финише выводтся в том порядке в котором финишировали лошади, а main перебирает их по порядку номеров
+3
Надежда
14 июля 2019, 22:42
О как, спасибо)
0