java – ThreadPool不运行提交的任务

我对
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 });

运行一段时间后(根据线程池completedTask计数器执行50-100任务后)我看到奇怪的行为 – 提交的任务附加到池队列但根本没有执行! ThreadPool报告活动任务= 0,任务队列大小和计数,并且没有任务根据日志执行.
有人有问题吗?

最佳答案 好吧,我收集足够的统计数据来说:这是具体的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

红帽框.这甚至不会在2.4.31和hihger上再现.

点赞