Не я догадываюсь что мой код может где то и гавно)) но все же мои рассуждения задача по потоками где то мы стартуем много потоков ищу где for (int i = 0; i < horseCount; i++) { horses.get(i).start(); } стартуем мы их тут ))) отлично теперь ищу что место где лошадь финиширует и пытаюсь понять что там Вот тут кажется она финиширует 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; } } } и isFinished должна стать true отлично то есть horses.get(0).isFinished станет true лошадь финишировала теперь есть с чем сравнивать if ((horses.get(0).isFinished)) теперь думаем что бы вывалится из цикла который нас сюда заганяет while (calculateHorsesFinished(horses) != horses.size()) { } вот вылезем только тогда когда calculateHorsesFinished(horses) будет равено 10 то есть мы узнаем что лошадь финишировала и к finishedCoun прибавляем один {horses.get(0).stop(); finishedCount++;} в самом начале метода calculateHorsesFinished мы обнуляем finishedCount потом пробегаемся по всем if ((horses.get(1).isFinished)) и если не true то пишем что лошадь еще не пришла выдем из цикла только в том случаи если все лошади пришли ну что то задача не валидаторится вроде все лошади пришли я контролировал движение лошадей