2 回答

TA貢獻1856條經(jīng)驗 獲得超11個贊
ExecutorService處理如何在工人之間分配任務。你所要做的就是一個一個地傳遞作業(yè)。
for (job jobObj : myJobOrganizer.all_jobs())
executor.submit(jobObj);
請注意,sumbitreturn aFuture<?>用于跟蹤您的任務是否已完成,或者是否出錯(還有任務結果,但 runnable 沒有結果)。如果您關心這些東西,您可能希望將它們收集在某種容器中,例如List.
如果您將 更改job為Callable<Void>,則提交會容易得多。Callable是 Runnable 的某種擴展,允許任務在完成時產(chǎn)生結果。由于您的傳輸沒有結果,因此將其java.lang.Void用作泛型參數(shù)的填充類型就可以了。
現(xiàn)在,只要做executor.invokeAll(myJobOrganizer.all_jobs())就足夠了。這將節(jié)省一些上下文切換,加快速度。(實際上很重要,因為你的任務都很小)
順便說一句,您應該知道并發(fā)訪問需要適當?shù)耐剑鷽]有。如果不同的工作涉及同一個帳戶,您的帳戶最終可能會處于錯誤狀態(tài)。我們也通常用大駝峰命名類,用小駝峰命名方法名。

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