[英]Alternate to Busy-Wait
在我的應用程序中,喬布斯將動態提交,我需要跟蹤提交的作業的完成情況。 關閉我的應用程序時,我想等到所有提交的作業完成。 為此,我維護了已提交工作ID的列表。 提出流程完成通知后,我將從列表中刪除該ID。 調用shutdown時,我一直等到列表變空。
while (!ids.isEmpty());
有沒有更好的方法來進行這種繁忙的等待。
如果要通過創建和啟動線程來實現作業分派和手動運行,則需要使用Object.wait
和Object.notify
來實現條件變量。 正確一點有點愚蠢...
但是更好的方法是使用ThreadPoolExecutor
服務來運行您的作業。 這使您可以提交所有作業,然后調用shutdown
和awaitTermination
...,它將等待直到所有排隊的作業完成。
您要重塑ExecutorService
嗎? 特別是它的awaitTermination()
方法? 是的, awaitTermination()
並不忙於等待...
您可以嘗試采用另一種方法:每個作業調用一個“退出”方法(在包含id的類中),以檢查這是否是最后一個死掉的過程。 這樣就不會有忙碌等待循環。 為每個作業提供一個具有退出方法的“ TerminationHandlerInterface”。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.