java線程池框架是什麼

來源:文萃谷 9.39K

多線程是程序員面試時常常會面對的問題,對多線程概念的掌握和理解水平,也常常被用來衡量一個人的編程實力。不錯,普通的多線程已經不容易了。以下是小編為大家搜索整理java線程池框架是什麼,希望能給大家帶來幫助!更多精彩內容請及時關注我們應屆畢業生考試網!

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密集

熱門標籤