成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

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

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

線程池的拒絕策略是指,當(dāng)線程池?zé)o法承載更多任務(wù)時(shí)執(zhí)行的行為。也就是當(dāng)線程池的核心線程數(shù)、最大線程、任務(wù)隊(duì)列都滿的情況下,又來了新的任務(wù)時(shí),線程池執(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ù)時(shí)會(huì)直接執(zhí)行該任務(wù)
executor.execute(task);  // 主線程執(zhí)行 task

(3)DiscardPolicy(丟棄策略)

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

示例代碼:

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

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

  • 行為:丟棄工作隊(duì)列中等待時(shí)間最長的任務(wù)(即隊(duì)列頭部的任務(wù)),然后重新嘗試提交當(dāng)前任務(wù)。
  • 特點(diǎn):優(yōu)先處理新任務(wù),但可能丟失重要舊任務(wù)。
  • 適用場景:適合處理時(shí)效性較強(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)拒絕策略,報(bào)錯(cuò)提示

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

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

CallerRunsPolicy

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

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

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

DiscardPolicy

簡單高效,無額外開銷

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

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

DiscardOldestPolicy

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

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

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

CustomRejectionPolicy

靈活

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

通常用于生產(chǎn)環(huán)境,先保存任務(wù)信息,再報(bào)警提示負(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

2011-03-04 13:17:33

2022-08-22 09:45:34

自動(dòng)駕駛

2014-04-29 10:56:23

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

2022-03-09 09:43:01

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

2015-07-17 09:50:16

Carthage優(yōu)劣比較

2021-11-27 05:00:43

線程邏輯地址

2015-11-12 18:09:10

2024-01-26 06:06:26

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

2012-01-19 19:00:50

2024-11-11 17:27:45

2025-04-11 07:50:00

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

2020-10-27 13:24:35

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

2014-04-17 12:01:58

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

2024-07-22 15:56:44

2018-11-07 13:00:30

機(jī)器學(xué)習(xí)深度學(xué)習(xí)集成學(xué)習(xí)
點(diǎn)贊
收藏

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

主站蜘蛛池模板: 国产精品国产a | 99视频在线 | 亚洲精品久久久久久久久久久久久 | 成人永久免费 | 中国免费黄色片 | 国产精品一区二区不卡 | 国产成人福利 | 亚洲系列第一页 | 久久久久久久一区二区三区 | 成人国产免费视频 | 亚洲欧美少妇 | 中文字幕在线中文 | 亚洲欧洲中文日韩 | 国产亚洲精品久久yy50 | 免费视频久久 | 国产精品免费一区二区三区四区 | 在线播放国产一区二区三区 | 日韩视频在线免费观看 | 天天影视网天天综合色在线播放 | 成人一区在线观看 | 欧美中文一区 | 一级毛片免费完整视频 | 日韩成人av在线播放 | 日韩国产在线 | 狠狠狠 | 国产精品日韩在线观看一区二区 | 99久久亚洲 | 日韩av免费看 | 欧美在线一区二区三区 | 精品亚洲91| 亚洲美乳中文字幕 | 91精品国产91久久久久久最新 | 在线欧美视频 | 亚洲综合一区二区三区 | 国产成人精品久久二区二区91 | 国产无套一区二区三区久久 | 黄色在线免费观看 | 男女久久久 | 91精品国产综合久久国产大片 | 丝袜毛片 | www4虎|