執行緒池,3大方法,7大引數,4種拒絕策略
阿新 • • 發佈:2022-05-07
執行緒池的技術:
事先準備好一些資源,有人要用就來拿,用完記得還(關閉池)
執行緒池的好處
- 減少資源的消耗
- 提高系統的效能,提高相應速度(因為池的開啟和關閉非常消耗資源)
- 易於一起管理執行緒
總結:執行緒池的優點:執行緒複用,可以控制最大併發數,管理執行緒
三大方法
public static void main(String[] args) { //ExecutorService ThreadPool = Executors.newSingleThreadExecutor();//單個執行緒啟動 //ExecutorService ThreadPool = Executors.newFixedThreadPool(9);//自定義執行緒的大小 ExecutorService ThreadPool = Executors.newCachedThreadPool();//根據執行的任務,可伸縮建立執行緒大小,任務越重,執行緒就越多,任務越輕,執行緒越少 try { for (int i = 0; i < 10; i++) { ThreadPool.execute(()->{ System.out.println(Thread.currentThread().getName()+""); }); } } finally { ThreadPool.shutdown();//用完就要關閉執行緒池 } }
七大引數
ThreadPoolExecutor(int corePoolSize,//主要執行緒大小
int maximumPoolSize,//最大執行緒大小
long keepAliveTime,//存在時間,沒有執行緒使用這個執行緒池,超過這個時間就會銷燬池
TimeUnit unit,//時間單位
BlockingQueue<Runnable> workQueue//阻塞佇列
ThreadFactory threadFactory,//執行緒工廠,一般是預設的,固定的
RejectedExecutionHandler handler//拒絕策略(有四種)
)
我們自定義一個執行緒池,來說明七大引數
package com.luoKing.ThreadPool; import java.util.concurrent.*; public class poolMothed { public static void main(String[] args) { ThreadPoolExecutor ThreadPool= new ThreadPoolExecutor(2, 5, 3, TimeUnit.DAYS, new LinkedBlockingDeque<>(3), Executors.defaultThreadFactory(), new ThreadPoolExecutor.AbortPolicy()); try { for (int i = 0; i < 10; i++) { ThreadPool.execute(()->{ System.out.println(Thread.currentThread().getName()+""); }); } } finally { ThreadPool.shutdown();//用完就要關閉執行緒池 } } }
四大拒絕策略
/*
*
* new ThreadPoolExecutor.AbortPolicy()//超過執行緒池最大容量(MAXPool+capacity),就會丟擲異常
*new ThreadPoolExecutor.CallerRunsPolicy()//當超過最大容量時,還有執行緒進入,那麼就會返回到原來的地方(從哪來就返回到哪裡去)
*new ThreadPoolExecutor.DiscardPolicy()//會直接丟棄執行緒,不處理
* new ThreadPoolExecutor.DiscardOldestPolicy()//等待最早的執行緒,如果最早的執行緒處理完,就接受該執行緒,否則丟棄
* */