Создается не 10, а 110 потоков в Java, почему?

Рейтинг: -2Ответов: 1Опубликовано: 30.06.2023

На курсах дали такое задание: Необходимо создать 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();
    }
}

Ответы

▲ -2Принят

При каждом значении i Вы создаете 10 потоков.

  • i=0, создали 10 потоков.
  • i=1, создали еще 10 потоков(уже 20 с предыдущими).
  • i=2, создали еще 10 потоков(уже 30 с предыдущими) и т.д.