線程池工作隊列飽和政策
Java線程池會将送出的任務先置于工作隊列中,在從工作隊列中擷取(SynchronousQueue直接由生産者送出給工作線程)。
那麼工作隊列就有兩種實作政策:無界隊列和有界隊列。
無界隊列不存在飽和的問題,但是其問題是當請求持續高負載的話,任務會無腦的加入工作隊列,那麼很可能導緻記憶體等資源溢出或者耗盡。
而有界隊列不會帶來高負載導緻的記憶體耗盡的問題,但是有引發工作隊列已滿情況下,新送出的任務如何管理的難題,這就是線程池工作隊列飽和政策要解決的問題。
飽和政策分為:Abort 政策, CallerRuns 政策,Discard政策,DiscardOlds政策。
當工作隊列滿了,不同政策的處理方式為:
1.Abort政策:預設政策,新任務送出時直接抛出未檢查的異常RejectedExecutionException,該異常可由調用者捕獲。