В чем разница между ExecutorService и массивом с потоками

«В чем разница между ExecutorService и массивом с потоками» — вопрос из категории Многопоточность, который задают на 23% собеседований Android Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

ExecutorService — это высокоуровневый API для управления пулом потоков, который предоставляет удобные методы для выполнения задач (submit(), invokeAll(), shutdown() и т. д.), автоматического масштабирования и обработки исключений.

Массив потоков (Thread[]) — это низкоуровневый подход, требующий ручного управления созданием, запуском и завершением потоков, что усложняет код и повышает риск утечек ресурсов.

Пример:

// ExecutorService
val executor = Executors.newFixedThreadPool(4)
executor.submit { /* задача */ }
executor.shutdown()

// Массив потоков
val threads = Array(4) { Thread { /* задача */ } }
threads.forEach { it.start() }
threads.forEach { it.join() }

ExecutorService предпочтительнее из-за лучшей управляемости и производительности.