轉自:
http://www.java265.com/JavaMianJing/202110/16347235251523.html
在多執行緒應用程式開發中,如果我們不使用執行緒池,則每次創建和銷毀執行緒將會消耗寶貴的CPU,記憶體資源,所以我們必須創建一個執行緒池
執行緒池的功能
執行緒池用于管理執行緒,用于減少系統資源消耗
創建一個執行緒池
實作思路:
借助執行緒池類Executor
借助其構造方法
public ThreadPoolExecutor(int corePoolSize,
int maximumPoolSize,
long keepAliveTime,
TimeUnit unit,
BlockingQueue<Runnable> workQueue,
ThreadFactory threadFactory,
RejectedExecutionHandler handler)
ThreadPoolExecutor構造方法的功能:
定義執行緒池的各種屬性:
執行緒池中的corePoolSize就是執行緒池中的核心執行緒數量,這幾個核心執行緒,只是在沒有用的時候,也不會被回收
maximumPoolSize就是執行緒池中可以容納的最大執行緒的數量
keepAliveTime,就是執行緒池中除了核心執行緒之外的其他的最長可以保留的時間,因為在執行緒池中,除了核心執行緒即使在無任務的情況下也不能被清除,其余的都是有存活時間的,非核心執行緒可以保留的最長的空閑時間
util,就是計算這個時間的一個單位
workQueue,就是等待佇列,任務可以儲存在任務佇列中等待被執行,執行的是FIFIO原則(先進先出)
threadFactory,就是創建執行緒的執行緒工廠
handler,是一種拒絕策略,當任務滿了,拒絕執行的策略
handler的拒絕策略
- AbortPolicy:不執行新任務,直接拋出例外,提示執行緒池已滿
- DisCardPolicy:不執行新任務,也不拋出例外
- DisCardOldSetPolicy:將訊息佇列中的第一個任務替換為當前新進來的任務執行
- CallerRunsPolicy:直接呼叫execute來執行當前任務
常見的執行緒池
- CachedThreadPool:可快取的執行緒池,該執行緒池中沒有核心執行緒,非核心執行緒的數量為Integer.max_value,就是無限大,當有需要時創建執行緒來執行任務,沒有需要時回收執行緒,適用于耗時少,任務量大的情況
- SecudleThreadPool:周期性執行任務的執行緒池,按照某種特定的計劃執行執行緒中的任務,有核心執行緒,但也有非核心執行緒,非核心執行緒的大小也為無限大,適用于執行周期性的任務
- SingleThreadPool:只有一條執行緒來執行任務,適用于有順序的任務的應用場景
- FixedThreadPool:定長的執行緒池,有核心執行緒,核心執行緒的即為最大的執行緒數量,沒有非核心執行緒
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/482142.html
標籤:Java
上一篇:MQTT 入門(1)--簡介
下一篇:《回爐重造》——集合(容器)
