问题描述
我想了解executorservice的awaitTermination()方法中超时的理想值。我们应该如何确定理想的超时时间?如果我们将一天用作超时时间,会不会有害?
boolean awaitTermination(long timeout,TimeUnit unit) throws InterruptedException;
假设我正在将数据从一个数据库加载到另一个数据库。有时,由于网络问题,它可能会变慢,甚至上载的文档数量也会增加。因此,判断最大时间变得有些困难。因此,在这种情况下,如果我将一天用作超时(实际上,我想使用awaitTermination()而不使executorService端发生超时)。这样做的缺点到底是什么?
awaitTermination(Long.MAX_VALUE,TimeUnit.DAYS)的缺点是什么?
因为无论如何,一旦任务完成,executorservice将终止
解决方法
这取决于任务可以消耗多长时间。
在最坏的情况下,最长的任务将花费多长时间? 可以说,最坏的情况是需要1分钟。然后花2分钟。 您只需计算最坏情况的时间加上一个缓冲区即可。
您根本不会无故取消已开始的作业,因为您可能会丢失数据。
如果您正在工作,例如在确认队列中,只有在完成工作后您才能确认,您可以立即终止,因为在下一次启动时,超时后您的工作人员会再次获得任务。 (但是要小心。如果服务器重新启动,您可能会陷入循环)