Очередь в ThreadPoolExecutor

207
22 февраля 2018, 13:53

Насколько я понимаю, принципы создания новых потоков в ThreadPoolExecutor следующие:

  1. Если количество потоков (значение, возвращаемое методом getPoolSize()?) меньше, чем corePoolSize, создаётся новый поток для выполнения задания.
  2. Если количество потоков равно (или больше чем) corePoolSize, задание добавляется в очередь.
  3. Если очередь заполнена и количество потоков в пуле меньше, чем maxPoolSize, создаётся новый поток для выполнения задания.
  4. Если очередь заполнена и количество потоков в пуле больше или равно maxPoolSize, задание отбрасывается.

Как тогда можно объяснить то, что строка логгера

logger.info("active executing tasks: " + threadPool.getActiveCount() + " current pool size: " + threadPool.getPoolSize() + " scheduled tasks: " + threadPool.getTaskCount() + " queue size: " + threadPool.getQueue().size());

выводит следующую строку

active executing tasks: 18 current pool size: 100 scheduled tasks: 10034469 queue size: 0

а после добавления ещё одного задания строкой:

threadPool.execute(new SmsTask(smsIn));

очередь увеличивается?

active executing tasks: 19 current pool size: 100 scheduled tasks: 10034470 queue size: 1

Правильно ли я понимаю, что getActiveCount() возвращает приблизительное количество выполняющихся в данный момент времени заданий, а getPoolSize() возвращает количество запущенных потоков? Т.е. если getActiveCount() возвращает 18, а getPoolSize() возвращает 100, то запущено 100 потоков, но 82 из них простаивают (находятся в состоянии idle)? Но если 82 потока простаивает, почему тогда новое задание добавляется в очередь, а не выполняется одним из этих idle-потоков?..

И чем может быть обусловлена большая разница между значениями, возвращаемыми методами getActiveCount() и getPoolSize() в ThreadPoolExecutor?

READ ALSO
Проблема со встраиванием в Webview видео с vimeo (embed)

Проблема со встраиванием в Webview видео с vimeo (embed)

В приложении нужно реализовать воспроизведение видео с youtube и vimeo, для решения этого вопроса был выбран Webview и вот этот примерС youtube всё отрабатывает...

230
android приложение с базой данных

android приложение с базой данных

До этого делал лишь клиентские android приложения, просто никакие данные хранить не требовалосьТеперь возникает вопрос

184
Раскодировать и кодировка пакета

Раскодировать и кодировка пакета

Использую nettyИмеется такой код

208