設置線程池配置時,如何選擇正確的RejectedExecutionHandler
?RejectedExecutionHandler - CallerRunsPolicy vs AbortPolicy
我有一個發佈事件的遺留應用程序(這些事件可能在本地使用或可能被遠程進程佔用)。目前,政策是放棄,導致很多例外和錯過的事件。我們將同步隊列傳遞給線程池執行器。
我正在考慮將RejectedExecutionHandler
更改爲呼叫者運行策略。這可能意味着調用者在達到線程綁定和隊列容量時花費時間運行該任務。我沒有看到任何問題。
到目前爲止,您的經驗是什麼?此外,使用無界隊列意味着沒有實用程序RejectedExecutionHandler
?
但是,感謝您的回答,「如果您無法承受延遲並罰款放棄該任務」或「非實時和批處理,非交互和脫機」不相關,並且大部分時間您都不想。我正在尋找使用案例,您可以選擇放棄策略,以及如果任務被拒絕,您希望任務提交者執行什麼操作。 – GauravJ
如果必須處理拒絕任務,則CallerRunsPolicy策略是唯一以系統吞吐量爲代價的解決方案。其他解決方案會持續這些事件並稍後在不同的ThreadPoolExecutor中處理它們 –