ThreadPool не запускает представленные задачи - PullRequest
4 голосов
/ 25 января 2011


У меня странная проблема с Java ThreadPool

Я определяю executorService следующим образом:

ExecutorService executorService = Executors.newFixedThreadPool(5)

и позже отправьте задачи:

while (!manager.stop()) {
   File file = getFile();
   if (file != null) {
       String name = file.getName();
       log.debug("add new task with name {}", name);
       outExecutorInfo();
       Future<?> task = executorService.submit(getTask(file));
       outTaskInfo(task);
       executeTasks.put(name, task);
       outExecuteTasks();
   }
}

outExecuteTasks регистрирует некоторую отладочную информацию, включая количество задач:

log.debug("activeCount={}, completedTaskCount={}, taskCount={}. poolSize={}", 
     new Object[] { activeCount, completedTaskCount,taskCount, poolSize });

через некоторое время (после выполнения 50-100 заданий в соответствии со счетчиком выполненных задач пула потоков) я вижу странное поведение - отправленные задания добавляются в очередь пула, но не выполняются вообще ThreadPool сообщил об активных задачах = 0, размер очереди задач большой и считается, и ни одна из задач не была выполнена в соответствии с журналом.
У кого-то есть проблемы?

1 Ответ

2 голосов
/ 18 февраля 2011

Хорошо, я собираю достаточно статистики, чтобы сказать: это проблема конкретного ядра Linux

[root@mag]$ uname -a
Linux ns.mag 2.4.20-8smp #1 SMP Thu Mar 13 17:45:54 EST 2003 i686 i686 i386  GNU/Linux

из redhat box.Это не воспроизводится даже на 2.4.31 и hihger.

...