TGViewer
Android under the hood Android under the hood @android_under_the_hood · 1.53K subscribers
Post #25 932
Кратко о реализации пула потоков.

1) Чаще всего для создания пула используется следующее API:

// один рабочий поток
Executors.newSingleThreadExecutor()
// 4 рабочих потока
Executors.newFixedThreadPool(4)


Под капотом этих простых методов создаётся объект класса ThreadPoolExecutor, который и реализует в себе механизм переиспользования потоков.

2) Для передачи новых задач существующим потокам ThreadPoolExecutor использует блокирующую очередь LinkedBlockingQueue, часто используемая реализация.

Задачи в очереди хранятся как Runnable:

private final BlockingQueue<Runnable> workQueue;


Логика работы:

- Взять самое первое значение, если очередь пустая приостановить текущий поток и ждать пока не появятся новые значения, используется потоками для ожидания новых задач

- Добавить новое значение без приостановок, используется для добавления новой задачи, чтобы случайно не заблокировать поток, работающий с ThreadPoolExecutor

3) Для настройки количества рабочих потоков ThreadPoolExecutor имеет corePoolSize и maximumPoolSize параметры, логика работы которых следующая:

- При запуске каждой новой задачи будут создаваться новые потоки, пока их количество не достигнет corePoolSize

- После достижения corePoolSize новые потоки будут создаваться только, если нет свободных и до тех пор пока не будет превышено значение maximumPoolSize

В случае когда corePoolSize == maximumPoolSize будет создано corePoolSize потоков.

4) ThreadPoolExecutor оборачивает каждый поток в Worker:

private final HashSet<Worker> workers = new HashSet<>();


Под капотом Worker запускает цикл ожидания новых задач от блокирующей очереди, а добавление задач происходит  распространённым вызовом Executor.execute() метода.

Пишите в комментах ваше мнение и всем хорошего кода!
  • 🔥 9
More from @android_under_the_hood
  1. Oct 4, 2026Всем привет, хочу поделиться проектом, который запустил 1 октября — ЗдесьЯ. Это цифровая с…
  2. Oct 2, 2026Kotlin lambdas, часть I. До версии Kotlin 2.0 лямбды компилировались в анонимные классы, р…
  3. Sep 27, 2026Делегат свойства в Kotlin. В Kotlin есть конструкция, которой нет в JVM: var name by NameD…
  4. Sep 23, 2026val vs var под капотом. На уровне Kotlin все просто: val x = 10 var y = 20 y = 30 // компи…
  5. Sep 20, 2026Возвращение Прошло уже полгода с последней записи на канале. За это время в моей жизни про…
  6. Feb 5, 2026Пару фактов о Go, часть II. 4) Вместо Kotlin Nullability указатели как в С/C++, то есть об…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →