2 回答

TA貢獻(xiàn)1804條經(jīng)驗(yàn) 獲得超7個(gè)贊
將您的 future 存儲(chǔ)在列表中,然后使用 get 有效地加入。
List<Future<?>> futures = new ArrayList<>();
futures.add(executor.schedule(() -> { doRealTask(); }, 0, TimeUnit.MICROSECONDS));
而不是關(guān)閉。
for(Future<?> future: futures){
future.get();
}
futures.clear();
現(xiàn)在您需要處理異常,并且可能在獲取時(shí)包含超時(shí)。

TA貢獻(xiàn)1866條經(jīng)驗(yàn) 獲得超5個(gè)贊
關(guān)閉狀態(tài)是不可逆的,因此如果需要,只需創(chuàng)建一個(gè)新的執(zhí)行器即可。沒(méi)有其他方法可以重用之前的方法。但是,如果您要再次創(chuàng)建它,為什么需要關(guān)閉它呢?如果它有太多任務(wù),并且您可以犧牲它們來(lái)?yè)Q取新任務(wù),那么為每個(gè)任務(wù)配置合理的超時(shí)并配置池本身(例如池和任務(wù)隊(duì)列大?。┦怯幸饬x的。
每次調(diào)用Executor.schedule(() -> { doRealTask(); }, 0, TimeUnit.MICROSECONDS);
都會(huì)返回ScheduledFuture
實(shí)例,您可以存儲(chǔ)它并稍后處理結(jié)果。
添加回答
舉報(bào)