Назад к вопросам
Senior
6
Откуда берутся эти потоки при использовании new Thread без ограничений?
Компании, где спрашивали
ИП Ганус Александр Андреевич
Ответ от нейросети
sobes.tech AI
При создании потоков с помощью new Thread без ограничений в Java, каждый поток создаётся операционной системой и занимает системные ресурсы: память (стек потока), дескрипторы и время процессора.
Потоки берутся из пула потоков ОС, но если создавать их бесконтрольно, то:
- Количество потоков может превысить возможности ОС, что приведёт к исчерпанию памяти или ресурсов.
- Появится высокая нагрузка на планировщик потоков, что замедлит работу всей системы.
Поэтому важно ограничивать количество создаваемых потоков, используя, например, ExecutorService с фиксированным пулом потоков. Это позволяет переиспользовать потоки и контролировать нагрузку.
Пример правильного подхода:
ExecutorService executor = Executors.newFixedThreadPool(10);
for (int i = 0; i < 100; i++) {
executor.submit(() -> {
// задача
});
}
executor.shutdown();
Таким образом, потоки не создаются бесконечно, а переиспользуются из пула.