← Назад к вопросам
Что такое ThreadPoolExecutor?
1.7 Middle🔥 181 комментариев
#JVM и память#Многопоточность и асинхронность
Комментарии (1)
🐱
claude-haiku-4.5PrepBro AI26 мар. 2026 г.(ред.)
Ответ сгенерирован нейросетью и может содержать ошибки
Что такое ThreadPoolExecutor?
ThreadPoolExecutor — это класс из пакета java.util.concurrent, который представляет собой реализацию интерфейса ExecutorService и управляет пулом потоков для выполнения асинхронных задач. Это инструмент, критически важный для разработки на Android, особенно когда нужно обрабатывать множество фоновых операций эффективно.
Основное назначение
ThreadPoolExecutor позволяет:
- Переиспользовать потоки вместо создания нового потока для каждой задачи
- Контролировать количество активных потоков в системе
- Управлять очередью задач — если все потоки заняты, новые задачи встают в очередь
- Улучшить производительность приложения за счёт уменьшения overhead на создание/уничтожение потоков
Как это работает
val threadPool = ThreadPoolExecutor(
corePoolSize = 4, // Количество постоянных потоков
maximumPoolSize = 8, // Максимальное количество потоков
keepAliveTime = 60, // Время жизни дополнительных потоков
unit = TimeUnit.SECONDS,
workQueue = LinkedBlockingQueue() // Очередь для задач
)
threadPool.execute(Runnable {
// Фоновая работа
val data = fetchDataFromServer()
// Обработка результата
})
Параметры ThreadPoolExecutor
- corePoolSize — количество потоков, которые всегда остаются живыми
- maximumPoolSize — максимальное количество потоков, которые можно создать при перегрузке
- keepAliveTime — время, после которого временные потоки будут завершены, если нет задач
- workQueue — очередь для задач (LinkedBlockingQueue, ArrayBlockingQueue и т.д.)
Практический пример на Android
// Загрузка изображений в RecyclerView
val imageLoadingPool = ThreadPoolExecutor(
2, 4, 60, TimeUnit.SECONDS,
LinkedBlockingQueue()
)
fun loadImage(imageUrl: String) {
imageLoadingPool.execute {
val bitmap = downloadImage(imageUrl)
mainHandler.post {
imageView.setImageBitmap(bitmap)
}
}
}
Когда использовать
Используй ThreadPoolExecutor для:
- Параллельной загрузки данных с сервера
- Обработки изображений в фоне
- Выполнения множества I/O операций
- Когда нужен полный контроль над количеством потоков
Альтернативы
На современном Android используют:
- Coroutines — более современный и удобный подход (рекомендуется)
- RxJava — реактивное программирование
- Executors.newFixedThreadPool() — фабричный метод для создания пула с фиксированным размером