執行緒池常用引數
| 引數名 | 型別 | 含義 |
|---|---|---|
| corePoolsize | int | 核心執行緒數 |
| maxPoolsize | int | 最大執行緒數 |
| keepAliveTime | long | 存活時間 |
| workQueue | BlockingQueue | 任務存盤佇列 |
| theadFactory | ThreadFactory | 通過該生成新的執行緒 |
| Handler | 拒絕策略 |
添加執行緒規則
- 如果執行緒數小于corePoolSize,即使其他作業執行緒處于空閑狀
態,也會創建一個新執行緒來運行新任務, - 如果執行緒數等于(或大于)corePoolSize但少于
maximumPoolSize,則將任務放入佇列, - 如果佇列已滿,并且執行緒數小于maxPoolSize,則創建一個新
執行緒來運行任務, - 如果佇列已滿,并且執行緒數大于或等于maxPoolSize,則拒絕
該任務,
常見作業佇列
1.直接交接:SynchronousQueue
2.無界佇列:LinkBlockingQueue
3.有界佇列;ArrayBlockingQueue
常見執行緒池:
1.FixedThreadPool:
創建一個固定數量的執行緒池
例如
ExecutorService executorService = Executors.newFixedThreadPool(5);
其具體實作為:
public static ExecutorService newFixedThreadPool(int nThreads) {
return new ThreadPoolExecutor(nThreads, nThreads,
0L, TimeUnit.MILLISECONDS,
new LinkedBlockingQueue<Runnable>());
}
2.newCachedThreadpool
可快取執行緒池
構造方法為:
ExecutorService executorService = Executors.newCachedThreadPool();
內部實作為:
public static ExecutorService newCachedThreadPool() {
return new ThreadPoolExecutor(0, Integer.MAX_VALUE,
60L, TimeUnit.SECONDS,
new SynchronousQueue<Runnable>());
}
3.ScheduledThreadPool
周期性執行緒池
public ScheduledThreadPoolExecutor(int corePoolSize) {
super(corePoolSize, Integer.MAX_VALUE, 0, NANOSECONDS,
new DelayedWorkQueue());
}
4.SingleThreadExecutor
單一執行緒池
public static ExecutorService newSingleThreadExecutor() {
return new FinalizableDelegatedExecutorService
(new ThreadPoolExecutor(1, 1,
0L, TimeUnit.MILLISECONDS,
new LinkedBlockingQueue<Runnable>()));
}
停止執行緒池的方法:
1.shutdown
2.shutdownnow
拒絕策略
1.AbortPolicy
2.DiscardPolicy
3.DiscardOldPolicy
4.CallerRunsPolicy
前三種會有所損失
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/257438.html
標籤:java
上一篇:四步,搞定一個短信驗證碼登錄!
