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())就足夠了。這將節省一些上下文切換,加快速度。(實際上很重要,因為你的任務都很?。?/p>
順便說一句,您應該知道并發訪問需要適當的同步,而您沒有。如果不同的工作涉及同一個帳戶,您的帳戶最終可能會處于錯誤狀態。我們也通常用大駝峰命名類,用小駝峰命名方法名。

TA貢獻1842條經驗 獲得超13個贊
Stream如果你不想使用循環,你可以使用它來做到這一點。如果您使用的是大于或等于 8 的 Java 版本,這里是一個示例
myJobList
.stream()
.forEach(e -> executor.execute(() -> {
//submit the jobs
}));
或者
myJobOrganizer.all_jobs()
.stream()
.forEach(e -> executor.submit(e));
executor.invokeAll(myJobList)如果您真的不想要循環,您可以使用提交您的列表。
添加回答
舉報