Откуда берутся эти потоки при использовании new Thread без ограничений?

При создании потоков с помощью new Thread без ограничений в Java, каждый поток создаётся операционной системой и занимает системные ресурсы: память (стек потока), дескрипторы и время процессора.

Короткий ответ

Что ответить на собеседовании

При создании потоков с помощью new Thread без ограничений в Java, каждый поток создаётся операционной системой и занимает системные ресурсы: память (стек потока), дескрипторы и время процессора.

Подробный разбор

Ответ с пояснениями

При создании потоков с помощью new Thread без ограничений в Java, каждый поток создаётся операционной системой и занимает системные ресурсы: память (стек потока), дескрипторы и время процессора.

Потоки берутся из пула потоков ОС, но если создавать их бесконтрольно, то:

  • Количество потоков может превысить возможности ОС, что приведёт к исчерпанию памяти или ресурсов.
  • Появится высокая нагрузка на планировщик потоков, что замедлит работу всей системы.

Поэтому важно ограничивать количество создаваемых потоков, используя, например, ExecutorService с фиксированным пулом потоков. Это позволяет переиспользовать потоки и контролировать нагрузку.

Пример правильного подхода:

ExecutorService executor = Executors.newFixedThreadPool(10);
for (int i = 0; i < 100; i++) {
    executor.submit(() -> {
        // задача
    });
}
executor.shutdown();

Таким образом, потоки не создаются бесконечно, а переиспользуются из пула.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее