Thread.sleep (10) будет спать в текущем выполняющемся потоке, т.е. не обязательно в одном из потоков, которые есть в вашем массиве, более вероятно, в основном потоке, который порождает другие, смотрящие на ваш пример, потому что он вызывается из этого потока это.
Если вы хотите, чтобы ваш процесс порождения ожидал, пока все его дочерние элементы не закончили работать, то Java предоставляет для этого встроенный механизм, а именно метод join. Что он делает, так это заставляет поток, в котором вы делаете вызов, ждать, пока поток, в котором вы вызываете его, не завершится. Если это действительно то, чего вы хотите достичь, то замените свой последний цикл for следующим:
for(Thread t : TCreate){ //Consider naming variables with initial lowercase
t.join();
//Should be called after it's been started but not until you have started all of them
}
//Execution resumes here when all spawned threads have completed their task.
Надеюсь, это прояснилось.