ThreadPool不运行提交的任务

时间:2011-01-25 06:16:08

标签: java multithreading 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,任务队列大小大,计数,没有任务根据日志执行 有人有问题吗?

1 个答案:

答案 0 :(得分:2)

好的,我收集足够的统计数据说:这是具体的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上再现。