if (!horse.isFinished()) {
    System.out.println("Waiting for " + horse.getName());
    horse.join();
}
countFinished++;
Валидатор упорно хочет, чтобы текущая лошадь посчиталась на следующей итерации цикла while, но ведь после выполнения join() мы гарантированно дождались завершения работы треда текущей лошади, а значит она финишировала, и можно ее посчитать. Или я что-то не так понимаю?