Executors

自定義線程池:

public class MyThreadPoolDemo {
/**第一個(gè)線程就用核心線程數(shù)去執(zhí)行,第二個(gè)線程就放到隊(duì)列中,因?yàn)殛?duì)列大小是3,所以第二個(gè)到第四個(gè)任務(wù)都放到隊(duì)列中,第五個(gè)任務(wù) * 依然是嘗試 放隊(duì)列,但是隊(duì)列滿了之后,考慮第二個(gè)參數(shù),最大線程數(shù)-第一個(gè)參數(shù),則是 可以新啟一個(gè)線程的內(nèi)容數(shù)量. * 第六個(gè)任務(wù)來(lái)了.既不能往隊(duì)列放,也不能啟動(dòng)線程數(shù). 所以第六個(gè)線程 則執(zhí)行 拒絕策略. * 拒絕策略: AbortPolicy 直接拋出異常組織系統(tǒng)正常工作 * CallerRunsPolicy 只要線程池未關(guān)閉,改策略直接在調(diào)用者線程中.運(yùn)行當(dāng)前唄丟棄的任務(wù). * DiscardOldestPolicy:丟棄最老的一個(gè)請(qǐng)求,嘗試在此提交當(dāng)前任務(wù). * DiscardPolicy:丟棄無(wú)法處理的任務(wù).不給于任何處理. * 如果需要自定義拒絕策略 可以實(shí)現(xiàn) RejectedExecutionHandler接口**/
public static void main(String[] args) {
ThreadPoolExecutor pool = new ThreadPoolExecutor(
1, //核心線程數(shù)
2, //最大連接數(shù)量
60L,//失效時(shí)間
TimeUnit.SECONDS,//失效時(shí)間單位
new ArrayBlockingQueue(3),//有界隊(duì)列
LinkedBlockingQueue()//無(wú)界隊(duì)列
new DiscardOldestPolicy(),//拒絕策略.
);
MyTask mt1 = new MyTask(1, "任務(wù)1");
MyTask mt2 = new MyTask(2, "任務(wù)2");
MyTask mt3 = new MyTask(3, "任務(wù)3");
MyTask mt4 = new MyTask(4, "任務(wù)4");
MyTask mt5 = new MyTask(5, "任務(wù)5");
MyTask mt6 = new MyTask(6, "任務(wù)6");
pool.execute(mt1);
pool.execute(mt2);
pool.execute(mt3);
pool.execute(mt4);
pool.execute(mt5);
pool.execute(mt6);
pool.shutdown();
}}

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容