簡體   English   中英

替代忙等待

[英]Alternate to Busy-Wait

在我的應用程序中,喬布斯將動態提交,我需要跟蹤提交的作業的完成情況。 關閉我的應用程序時,我想等到所有提交的作業完成。 為此,我維護了已提交工作ID的列表。 提出流程完成通知后,我將從列表中刪除該ID。 調用shutdown時,我一直等到列表變空。

while (!ids.isEmpty());

有沒有更好的方法來進行這種繁忙的等待。

如果要通過創建和啟動線程來實現作業分派和手動運行,則需要使用Object.waitObject.notify來實現條件變量。 正確一點有點愚蠢...

但是更好的方法是使用ThreadPoolExecutor服務來運行您的作業。 這使您可以提交所有作業,然后調用shutdownawaitTermination ...,它將等待直到所有排隊的作業完成。

您要重塑ExecutorService嗎? 特別是它的awaitTermination()方法? 是的, awaitTermination()並不忙於等待...

您可以嘗試采用另一種方法:每個作業調用一個“退出”方法(在包含id的類中),以檢查這是否是最后一個死掉的過程。 這樣就不會有忙碌等待循環。 為每個作業提供一個具有退出方法的“ TerminationHandlerInterface”。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM