我对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,任务队列大小大,计数,没有任务根据日志执行 有人有问题吗?
答案 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上再现。