偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

線程池拒絕策略四大“送命題”:答錯一個,offer直接涼涼!

開發(fā) 前端
當(dāng)線程池的核心線程數(shù)、最大線程、任務(wù)隊(duì)列都滿的情況下,又來了新的任務(wù)時,線程池執(zhí)行的行為被稱之為線程池的拒絕策略。

線程池的拒絕策略是指,當(dāng)線程池?zé)o法承載更多任務(wù)時執(zhí)行的行為。也就是當(dāng)線程池的核心線程數(shù)、最大線程、任務(wù)隊(duì)列都滿的情況下,又來了新的任務(wù)時,線程池執(zhí)行的行為被稱之為線程池的拒絕策略。

線程池的執(zhí)行流程如下:

1.內(nèi)置拒絕策略

在 Java 中,線程池內(nèi)置了以下四種拒絕策略(Rejected Execution Policy)。

(1)AbortPolicy(中止策略)

  • 行為默認(rèn)拒絕策略,直接拋出 RejectedExecutionException 異常。
  • 特點(diǎn):強(qiáng)制調(diào)用方處理任務(wù)被拒絕的情況。
  • 適用場景:對任務(wù)丟失不敏感的場景。如果對丟失敏感需結(jié)合異常捕獲機(jī)制處理(記錄信息并告警)。

示例代碼:

new ThreadPoolExecutor(..., new ThreadPoolExecutor.AbortPolicy());

(2)CallerRunsPolicy(調(diào)用者運(yùn)行策略)

  • 行為:將任務(wù)退回給提交任務(wù)的線程(即調(diào)用 execute() 的線程),由該線程直接執(zhí)行任務(wù)。
  • 特點(diǎn):變相降低任務(wù)提交速度,避免線程池過載。
  • 適用場景:希望任務(wù)最終被處理,且能承受一定延遲(如日志記錄)。

示例效果:

// 假設(shè)線程池已滿,主線程提交任務(wù)時會直接執(zhí)行該任務(wù)
executor.execute(task);  // 主線程執(zhí)行 task

(3)DiscardPolicy(丟棄策略)

  • 行為:靜默丟棄被拒絕的任務(wù),不拋出異常,也不執(zhí)行任務(wù)。
  • 特點(diǎn):無感知丟棄,可能導(dǎo)致數(shù)據(jù)丟失。
  • 適用場景:允許任務(wù)丟失的非關(guān)鍵場景(如實(shí)時監(jiān)控?cái)?shù)據(jù)采樣)。

示例代碼:

new ThreadPoolExecutor(..., new ThreadPoolExecutor.DiscardPolicy());

(4)DiscardOldestPolicy(丟棄最舊任務(wù)策略)

  • 行為:丟棄工作隊(duì)列中等待時間最長的任務(wù)(即隊(duì)列頭部的任務(wù)),然后重新嘗試提交當(dāng)前任務(wù)。
  • 特點(diǎn):優(yōu)先處理新任務(wù),但可能丟失重要舊任務(wù)。
  • 適用場景:適合處理時效性較強(qiáng)的任務(wù)(如消息推送,新任務(wù)優(yōu)先級更高)。

示例代碼:

new ThreadPoolExecutor(..., new ThreadPoolExecutor.DiscardOldestPolicy());

2.自定義拒絕策略

除了以上四種內(nèi)置拒絕策略之外,程序中還可以通過實(shí)現(xiàn) RejectedExecutionHandler 接口實(shí)現(xiàn)自定義策略:

public class CustomRejectionPolicy implements RejectedExecutionHandler {
    @Override
    public void rejectedExecution(Runnable task, ThreadPoolExecutor executor) {
        // 自定義邏輯(如記錄日志、持久化任務(wù)、重試等)
        System.out.println("Task rejected: " + task);
        // 保存任務(wù)信息
        // 通知相關(guān)負(fù)責(zé)人
    }
}

// 使用自定義策略
ThreadPoolExecutor executor = new ThreadPoolExecutor(
    corePoolSize, maxPoolSize, keepAliveTime, unit, workQueue, new CustomRejectionPolicy()
);

小結(jié)

策略

優(yōu)點(diǎn)

缺點(diǎn)

適用場景

AbortPolicy

默認(rèn)拒絕策略,報錯提示

需處理異常,增加代碼復(fù)雜度

任務(wù)丟失不敏感的場景

CallerRunsPolicy

任務(wù)一定執(zhí)行

可能阻塞主線程,影響響應(yīng)速度

非實(shí)時任務(wù),允許延遲處理(如日志)

DiscardPolicy

簡單高效,無額外開銷

數(shù)據(jù)丟失風(fēng)險高

可容忍數(shù)據(jù)丟失的場景(如監(jiān)控采樣)

DiscardOldestPolicy

優(yōu)先處理新任務(wù)

可能丟失重要舊任務(wù)

時效性強(qiáng)的任務(wù)(如實(shí)時消息推送)

CustomRejectionPolicy

靈活

實(shí)現(xiàn)復(fù)雜

通常用于生產(chǎn)環(huán)境,先保存任務(wù)信息,再報警提示負(fù)責(zé)人

責(zé)任編輯:姜華 來源: 磊哥和Java
相關(guān)推薦

2020-11-25 11:33:47

Java線程技術(shù)

2020-02-18 14:25:51

Java線程池拒絕策略

2009-10-22 10:06:54

CLR線程池教程

2020-07-08 12:05:55

Java線程池策略

2024-10-09 15:58:02

2014-04-29 10:56:23

物聯(lián)網(wǎng)IoT

2022-03-09 09:43:01

工具類線程項(xiàng)目

2011-03-04 13:17:33

2022-08-22 09:45:34

自動駕駛

2015-07-17 09:50:16

Carthage優(yōu)劣比較

2021-11-27 05:00:43

線程邏輯地址

2012-01-19 19:00:50

2024-11-11 17:27:45

2015-11-12 18:09:10

2024-01-26 06:06:26

單體微服務(wù)容器化

2025-04-11 07:50:00

虛析構(gòu)函數(shù)C++開發(fā)

2020-10-27 13:24:35

線程池系統(tǒng)模型

2018-11-07 13:00:30

機(jī)器學(xué)習(xí)深度學(xué)習(xí)集成學(xué)習(xí)

2014-10-22 15:22:55

大數(shù)據(jù)云安全

2011-03-21 09:01:49

CSS框架
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號