首頁 >Java >java教程 >Java 執行緒池框架

Java 執行緒池框架

高洛峰
高洛峰原創
2017-02-11 16:52:461306瀏覽

本文主要介紹了Java 執行緒池框架的相關知識。具有很好的參考價值,下面跟著小編一起來看下吧

一、線程池結構圖

Java 线程池框架

二、範例

1:newSingleThreadExecutor

public class MyThread extends Thread {
 @Override
 publicvoid run() {
 System.out.println(Thread.currentThread().getName() + "正在执行");
 }
}

輸入結果:

ExecutorService pool = Executors. newSingleThreadExecutor();
 Thread t1 = new MyThread();
 Thread t2 = new MyThread();
 Thread t3 = new MyThread();
 //将线程放入池中进行执行
 pool.execute(t1);
 pool.execute(t2);
 pool.execute(t3);
 //关闭线程池
 pool.shutdown();

輸入結果:

pool-1-thread-1正在执行
pool-1-thread-1正在执行
pool-1-thread-1正在执行

3 : newCachedThreadPool

ExecutorService pool = Executors.newFixedThreadPool(3);
Thread t1 = new MyThread();
 Thread t2 = new MyThread();
 Thread t3 = new MyThread();
 Thread t4 = new MyThread();
 Thread t5 = new MyThread();
 //将线程放入池中进行执行
 pool.execute(t1);
 pool.execute(t2);
 pool.execute(t3);
 pool.execute(t4);
 pool.execute(t5);
pool.shutdown();

輸入結果:

pool-1-thread-1正在执行
pool-1-thread-2正在执行
pool-1-thread-1正在执行
pool-1-thread-2正在执行

輸入結果:

ExecutorService pool = Executors.newCachedThreadPool();
 Thread t1 = new MyThread();
 Thread t2 = new MyThread();
 Thread t3 = new MyThread();
 Thread t4 = new MyThread();
 Thread t5 = new MyThread();
 //将线程放入池中进行执行
 pool.execute(t1);
 pool.execute(t2);
 pool.execute(t3);
 pool.execute(t4);
 pool.execute(t5);
 //关闭线程池
 pool.shutdown();

三、執行緒池核心參數

corePoolSize : 池中核心的執行緒數

maximumPoolSize : 池中允許的最大執行緒數。

keepAliveTime : 當執行緒數大於核心時,此為終止前多餘的空閒執行緒等待新任務的最長時間。

unit : keepAliveTime 參數的時間單位。 workQueue : 執行前用於保持任務的佇列。此佇列僅保持由 execute方法提交的 Runnable任務。

threadFactory : 執行程式建立新執行緒時使用的工廠。

handler : 由於超出執行緒範圍和佇列容量而使執行被阻塞時所使用的處理程序。

ThreadPoolExecutor :Executors類別的底層實作。

3.1 任務排隊機制

SynchonousQueue: 同步佇列,佇列直接提交給執行緒執行而不保持它們,此時執行緒池通常是無界的執行緒界對列數最大數量時,新任務就會在隊列中等待執行,可能會造成隊列無限膨脹

ArrayBlockingQueue : 有界隊列,有助於防止資源耗盡,一旦達到上限,可能會造成新任務丟失

注意:

newSingleThreadExecutor、newFixedThreadPool使用的是LinkedBlockingQueue

newCachedThreadPool 使用的是SynchonousQueue

newCachedThreadPool 使用的是SynchonousQueue

.執行流程

3.3 執行緒大小決定:

cpu密集型: 盡量少開線程,最佳線程數Ncpu+1

io密集型:多開線程,2Ncpu

混合型:根據情況而定,可以拆分成io密集和cou密集 更多Java 執行緒池框架相關文章請關注PHP中文網!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn