在UNIX环境中运行Java ExecutorService(java.util.concurrent)似乎存在一些问题。这个问题在Windows中没有复制......
问题:池花费的时间过长:
该程序通常会创建一个新池:
ExecutorService executorService = Executors.newFixedThreadPool(noOfThreads);
向其提交任务:
executorService.execute(thread);
标记它已关闭以执行新任务,因此无法再提交任务:
executorService.shutdown();
进行阻塞调用以终止线程:
executorService.awaitTermination(10, TimeUnit.HOURS);
现在,正如我可以从日志中看到的那样,我可以看到线程在很短的时间内完成了他们的工作。即使线程池需要2个小时才能完成所有任务,awaitTermination()
调用表明池已经占用10个小时的整个超时时间,这意味着池一旦完成后就不会放弃线程。
没有得到任何处理此问题的论坛/特定于unix环境的多线程方面。有没有人遇到过这种情况之前和之后知道如何克服这个问题吗?