Mar*_*bel 1 java multithreading web-applications executorservice
我使用ExecutorService的Java的Web服务器应用程序的并行执行风格的一些计算任务,然后调用shutdown()与awaitTermination()等待做的所有任务.整个计算有时可能需要几十分钟.
awaitTermination()方法是阻塞主线程,直到超时(或中断),但我只是想启动任务并立即响应客户端,并在所有任务竞争后关闭服务(遵循约定总是关闭线程池).
所以我的问题是,有什么方法可以在完成所有任务后通知我,以便我可以调用该shutdown()方法?听者还是什么..
谢谢!
您正在尝试解决不存在的问题.考虑以下文档ExecutorService.shutdown():
启动有序关闭,其中先前提交的任务将被执行,但不会接受任何新任务....
此方法不会等待先前提交的任务完成执行.
换句话说,只是呼叫shutdown()已经完成了你想要的一切
唯一的障碍是,awaitTermination尽管您不想等待,但您正在打电话,这有一个简单的解决方案:不要打电话 awaitTermination.
之所以会产生混淆,因为在你的问题中,你会问"当我完成所有任务时我可以得到通知,所以我可以调用shutdown()方法",但这与你在代码中实际做的事情相矛盾.您之后正在调用awaitTermination , shutDown因此您没有等待以启动关闭,而是启动第shutdown一个并等待其完成,这样就是awaitTermination等待完成关闭的目的.
把它放在一个句子中,只需shutDown在提交后调用,以便在完成所有提交的作业后关闭服务,awaitTermination除非你真的想等待终止,否则不要打电话.
| 归档时间: |
|
| 查看次数: |
886 次 |
| 最近记录: |