多執行緒是程式設計師面試時常常會面對的問題,對多執行緒概念的掌握和理解水平,也常常被用來衡量一個人的程式設計實力。不錯,普通的多執行緒已經不容易了。以下是小編為大家搜尋整理java執行緒池框架是什麼,希望能給大家帶來幫助!更多精彩內容請及時關注我們應屆畢業生考試網!
一、執行緒池結構圖
二、示例
定義執行緒介面
6public class MyThread extends Thread {@Overridepublicvoid run() {tln(entThread()ame() + "正在執行");}}
1:newSingleThreadExecutor
10ExecutorService pool = Executors. newSingleThreadExecutor();Thread t1 = new MyThread();Thread t2 = new MyThread();Thread t3 = new MyThread();//將執行緒放入池中進行執行ute(t1);ute(t2);ute(t3);//關閉執行緒池down();
輸入結果:
3pool-1-thread-1正在執行pool-1-thread-1正在執行pool-1-thread-1正在執行
2:newFixedThreadPool
13ExecutorService pool = ixedThreadPool(3);Thread t1 = new MyThread();Thread t2 = new MyThread();Thread t3 = new MyThread();Thread t4 = new MyThread();Thread t5 = new MyThread();//將執行緒放入池中進行執行ute(t1);ute(t2);ute(t3);ute(t4);ute(t5);down();
輸入結果:
4pool-1-thread-1正在執行pool-1-thread-2正在執行pool-1-thread-1正在執行pool-1-thread-2正在執行
3 :newCachedThreadPool
14ExecutorService pool = achedThreadPool();Thread t1 = new MyThread();Thread t2 = new MyThread();Thread t3 = new MyThread();Thread t4 = new MyThread();Thread t5 = new MyThread();//將執行緒放入池中進行執行ute(t1);ute(t2);ute(t3);ute(t4);ute(t5);//關閉執行緒池down();
輸入結果:
5pool-1-thread-2正在執行pool-1-thread-4正在執行pool-1-thread-3正在執行pool-1-thread-1正在執行pool-1-thread-5正在執行
4 :ScheduledThreadPoolExecutor
14ScheduledExecutorService pool = cheduledThreadPool(2);duleAtFixedRate(new Runnable() {//每隔一段時間就觸發異常 @Override public void run() { //throw new RuntimeException(); tln("================"); }}, 1000, 2000, ISECONDS);duleAtFixedRate(new Runnable() {//每隔一段時間列印系統時間,證明兩者是互不影響的 @Override public void run() { tln("+++++++++++++++++"); }}, 1000, 2000, ISECONDS);
輸入結果:
4================+++++++++++++++++++++++++++++++++++++++++++++++++++
三、執行緒池核心引數
corePoolSize : 池中核心的執行緒數
maximumPoolSize : 池中允許的最大執行緒數。
keepAliveTime : 當執行緒數大於核心時,此為終止前多餘的空閒執行緒等待新任務的最長時間。
unit : keepAliveTime 引數的時間單位。
workQueue : 執行前用於保持任務的佇列。此佇列僅保持由 execute方法提交的 Runnable任務。
threadFactory : 執行程式建立新執行緒時使用的工廠。
handler : 由於超出執行緒範圍和佇列容量而使執行被阻塞時所使用的`處理程式。
ThreadPoolExecutor :Executors類的底層實現。
3.1 任務排隊機制
SynchonousQueue: 同步佇列,佇列直接提交給執行緒執行而不保持它們,此時執行緒池通常是無界的
LinkedBlockingQueue: 無界對列,當執行緒池執行緒數達到最大數量時,新任務就會在佇列中等待執行,可能會造成佇列無限膨脹
ArrayBlockingQueue : 有界佇列,有助於防止資源耗盡,一旦達到上限,可能會造成新任務丟失
注意:
newSingleThreadExecutor、newFixedThreadPool使用的是LinkedBlockingQueue
newCachedThreadPool 使用的是 SynchonousQueue
newScheduledThreadPool使用的是 DelayedWorkQueue
3.2 執行緒執行流程
3.3 執行緒大小確定:
cpu密集型: 儘量少開執行緒,最佳執行緒數 Ncpu+1
io密集型:多開執行緒,2Ncpu
混合型:根據情況而定,可以拆分成io密集和cou密集