Задача решена, но в процессе решения сделал неосознанную ошибку и не могу помять этот момент: Вот решение правильное:
for (Horse h:horses ) {
            if(h.isFinished())countFinished++;
            else{
                System.out.println("Waiting for " + h.getName());
                h.join();
            }
        }
А вот код, который не принял Валидатор, но который тоже работает:
for (Horse h:horses ) {
            if(h.isFinished)countFinished++;
            else{
                System.out.println("Waiting for " + h.getName());
                h.join();
            }
        }
Мой вопрос касается следующего: экземпляр Лошади в списке, судя по второму блоку кода, имеет поле h.isFinished и оно является Boolean (дебаггер подтверждает). Однако!!! Данное поле в классе Horse имеет доступ private и по всем правилам его не должно быть видно... а оно видно... Предположение, о том, что данное поле может относиться к Родительскому классу Thread оказалось ошибочным - нет там таких полей. Вопрос - откуда оно берется и почему программа корректно работает? Кстати, класс Horse:
public static 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;
            }
        }
    }
}