Java执行器是否在上一个调用完成后执行一个调用?

Java执行器是否在上一个调用完成后执行一个调用?,java,multithreading,concurrency,futuretask,executors,Java,Multithreading,Concurrency,Futuretask,Executors,我有一个定制的业务需求。我需要执行一系列服务调用。每个调用都会在数据库中创建一个新记录。我只需要在前一个服务调用完成后执行下一个服务调用,因为新的服务调用将使用前一个服务调用在DB中创建的记录作为输入参数 我已经决定在将来的任务中包装这些服务调用,然后使用Executors.newSingleThreadExecutor()在循环中执行这些任务 请建议它是否足够,如果不足够,请提供更好的解决方案 在执行下一个任务之前,我是否还需要放置task.isDone() 我已决定使用Executors.n

我有一个定制的业务需求。我需要执行一系列服务调用。每个调用都会在数据库中创建一个新记录。我只需要在前一个服务调用完成后执行下一个服务调用,因为新的服务调用将使用前一个服务调用在DB中创建的记录作为输入参数

我已经决定在将来的任务中包装这些服务调用,然后使用
Executors.newSingleThreadExecutor()
在循环中执行这些任务

请建议它是否足够,如果不足够,请提供更好的解决方案

在执行下一个任务之前,我是否还需要放置
task.isDone()

我已决定使用Executors.newSingleThreadExecutor()

根据您的要求,这是一个不错的选择

请建议它是否足够,如果不足够,请提供更好的解决方案

是的,差不多。对于标准JDK库,这可能是您能找到的最好的

在执行下一个任务之前,我是否需要放置task.isDone()

否。此执行器的javadoc明确声明“[…]任务保证按顺序执行,并且在任何给定时间都不会有多个任务处于活动状态。”


因此,在前一个活动任务终止(成功或失败)之前,不会启动任何任务。只要把它们塞进执行器,它就会帮你处理事情。

“每个任务都应该在前一个任务完成后执行。”这听起来像是一个糟糕的模式-
未来
通常不应该相互依赖,或者需要按特定顺序执行。@dimo414……请建议一种更好的模式来实现此业务目标???
未来的
s旨在成为最终完成的工作单元,一旦完成,您就可以对其进行处理。因为你没有这个要求,但是没有说你的其他要求是什么,所以很难说。我认为在
列表上进行for循环就可以了。如果没有,请考虑另一个问题,全面描述您的基本业务需求是什么,并且有人可以建议一个合适的工具。