Жалуется на цикл while в методе calculateHorsesFinished. Всё делал по требованиям, программа работает корректно, завершается после выполнения. Не понял в каком месте использовать join(), так как после вызова join() у любого объекта, завершаются все треды из List (тестил черед дебагг, пишу про join(), потому что задача была на эту тему). Как можно реализовать цикл while, что бы он не был бесконечным для валидатора?
![]()

package com.javarush.task.task16.task1607;
import java.util.ArrayList;
import java.util.List;
/*
Horse Racing
*/
public class Solution {
public static void main(String[] args) throws InterruptedException {
List<Horse> horses = prepareHorsesAndStart(10);
while (calculateHorsesFinished(horses) != horses.size()) {
}
}
public static int calculateHorsesFinished(List<Horse> horses) throws InterruptedException {
int finishedCount = 0;
for (Horse horse : horses) {
if (!horse.isFinished()) {
System.out.println("Waiting for " + horse.getName());
}
while (horse.isFinished()) {
}
finishedCount++;
}
return finishedCount;
}
public static List<Horse> prepareHorsesAndStart(int horseCount) {
List<Horse> horses = new ArrayList<>(horseCount);
String number;
for (int i = 1; i < horseCount + 1; i++) {
number = i < 10 ? ("0" + i) : "" + i;
horses.add(new Horse("Horse_" + number));
}
System.out.println("All horses start the race!");
for (int i = 0; i < horseCount; i++) {
horses.get(i).start();
}
return horses;
}
}
class Horse extends Thread {
private boolean isFinished;
public Horse(String name) {
super(name);
}
public boolean isFinished() {
return isFinished;
}
public void run() {
String s = "";
for (int i = 0; i < 1001; i++) { // Delay
s += "" + i;
if (i == 1000) {
s = " has finished the race!";
System.out.println(getName() + s);
isFinished = true;
}
}
}
}


