使用ExecutorService.awaitTermination()在UNIX中放弃Java线程的问题

时间:2015-03-25 08:50:23

标签: java multithreading concurrency threadpool

在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环境的多线程方面。有没有人遇到过这种情况之前和之后知道如何克服这个问题吗?

0 个答案:

没有答案