我对
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上再现.