Как в Java узнать о том, что поток (thread) закончил выполняться?
Один объект Thread — один поток, даже если вы вызовете start несколько раз. В вашем случае разумно воспользоваться более высокоуровневой абстракцией типа ExecutorService.

ExecutorService executor = Executors.newFixedThreadPool(4);
List<Future<MyResult>> futures = new ArrayList<>();
for (File path: imgToProcPath) {
    executor.submit(new MyImageProcessingTask(path);
}
for (Future<MyResult> future: futures) {
   displayThumbnail(future.get());
}
for (int i = 0; i < 10; i++)
            {
                
                Thread thread = new Thread(new ThreadStart(ФУНКЦИЯ ВЫПОЛНЯЮЩАЯСЯ В ПОТОКЕ));
                thread.Name = Convert.ToString(i);
                thread.Start();
            }


И не забудь проверить imgToProcPath.length;