Создается не 10, а 110 потоков в Java, почему?
На курсах дали такое задание: Необходимо создать 10 потоков и пул только из 2 потоков. Пул должен выполнять действие: выводить имя потока и i, которое увеличивается с 0 до 10. Проследите, чтобы одновременно выполнялись только 2 потока.
Я, как мне показалось, сделал верно и вывод получается правильный - каждый поток выводится 10 раз и с каждым разом увеличивает i, программа завершается тогда, когда каждый поток выводит 10.
Однако учитель в ревью сказал, что я создал 110 потоков, а не 10, моя проблема в том, что я не понимаю каким образом это сделал и как это исправить. Вот код:
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.ThreadPoolExecutor;
public class Main {
public static void main(String[] args) {
int maxThreads = 2;
ExecutorService executor = Executors.newFixedThreadPool(maxThreads);
ThreadPoolExecutor threadPoolExecutor = (ThreadPoolExecutor) executor;
threadPoolExecutor.setMaximumPoolSize(maxThreads);
for (int i = 0; i <= 11 ; i++) {
Runnable thread = new MyThread("Поток Олег "+i);
Runnable thread2 = new MyThread("Поток Витя "+i);
Runnable thread3 = new MyThread("Поток Виталик "+i);
Runnable thread4 = new MyThread("Поток Слава "+i);
Runnable thread5 = new MyThread("Поток Ян "+i);
Runnable thread6 = new MyThread("Поток Иван "+i);
Runnable thread7 = new MyThread("Поток Даня "+i);
Runnable thread8 = new MyThread("Поток Влад "+i);
Runnable thread9 = new MyThread("Поток Давид "+i);
Runnable thread10 = new MyThread("Поток Даниил "+i);
threadPoolExecutor.execute(thread);
threadPoolExecutor.execute(thread2);
threadPoolExecutor.execute(thread3);
threadPoolExecutor.execute(thread4);
threadPoolExecutor.execute(thread5);
threadPoolExecutor.execute(thread6);
threadPoolExecutor.execute(thread7);
threadPoolExecutor.execute(thread8);
threadPoolExecutor.execute(thread9);
threadPoolExecutor.execute(thread10);
}
executor.shutdown();
}
}
Источник: Stack Overflow на русском