2 回答

TA贡献1856条经验 获得超11个赞
ExecutorService处理如何在工人之间分配任务。你所要做的就是一个一个地传递作业。
for (job jobObj : myJobOrganizer.all_jobs())
executor.submit(jobObj);
请注意,sumbitreturn aFuture<?>用于跟踪您的任务是否已完成,或者是否出错(还有任务结果,但 runnable 没有结果)。如果您关心这些东西,您可能希望将它们收集在某种容器中,例如List.
如果您将 更改job为Callable<Void>,则提交会容易得多。Callable是 Runnable 的某种扩展,允许任务在完成时产生结果。由于您的传输没有结果,因此将其java.lang.Void用作泛型参数的填充类型就可以了。
现在,只要做executor.invokeAll(myJobOrganizer.all_jobs())就足够了。这将节省一些上下文切换,加快速度。(实际上很重要,因为你的任务都很小)
顺便说一句,您应该知道并发访问需要适当的同步,而您没有。如果不同的工作涉及同一个帐户,您的帐户最终可能会处于错误状态。我们也通常用大驼峰命名类,用小驼峰命名方法名。

TA贡献1842条经验 获得超12个赞
Stream如果你不想使用循环,你可以使用它来做到这一点。如果您使用的是大于或等于 8 的 Java 版本,这里是一个示例
myJobList
.stream()
.forEach(e -> executor.execute(() -> {
//submit the jobs
}));
或者
myJobOrganizer.all_jobs()
.stream()
.forEach(e -> executor.submit(e));
executor.invokeAll(myJobList)如果您真的不想要循环,您可以使用提交您的列表。
添加回答
举报