當前位置:才華齋>計算機>java語言>

java執行緒池框架解析

java語言 閱讀(1.02W)

使用Java中成型的框架來幫助我們開發併發應用即可以節省構建專案的時間,也可以提高應用的效能。以下是小編為大家搜尋整理java執行緒池框架解析,希望能給大家帶來幫助!更多精彩內容請及時關注我們應屆畢業生考試網!

java執行緒池框架解析

Java物件例項的鎖一共有四種狀態:無鎖,偏向鎖,輕量鎖和重量鎖。原始脫離框架的併發應用大部分都需要手動完成加鎖釋放,最直接的就是使用synchronized和volatile關鍵字對某個物件或者程式碼塊加鎖從而限制每次訪問的次數,從物件之間的競爭也可以實現到物件之間的協作。但是這樣手動實現出來的`應用不僅耗費時間而且效能表現往往又有待提升。

  一、執行緒池結構圖

  二、示例

定義執行緒介面

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