【Java並發核心四】Executor 與 ThreadPoolExecutor
阿新 • • 發佈:2018-10-15
rup format int try 實現 stack ide 抽象 public () 返回 ExecutorService 實例,創建無界限線程池,理論上線程最大個數是 Integer.MAX_VALUE,使用舉例:
Executor 和 ThreadPoolExecutor 實現的是線程池,主要作用是支持高並發的訪問處理。
Executor 是一個接口,與線程池有關的大部分類都實現了此接口。
ExecutorService 是 Executor 的子接口;AbstractExecutorService 是 ExecutorService 的實現類,但是是抽象類。
ThreadPoolExecutor 是 AbstractExecutorService 的子類,可實例化。
Executors 是一個工廠類,用於創建線程池。
1、Executors 的 使用:
(1) newCachedThreadPool
final SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS"); ExecutorService executorService = Executors.newCachedThreadPool(); // 此線程池運行5個線程 for (int i = 0; i < 5; i++) {final int index = i; executorService.execute(new Runnable() { @Override public void run() { System.out.println("Thread-" + index + "-begin-" + sf.format(new Date())); try { Thread.sleep(1000); }catch (InterruptedException e) { e.printStackTrace(); } System.out.println("Thread-" + index + "-end-" + sf.format(new Date())); } }); }
運行結果:
從上圖可以看出,線程在execute 加載後,基本是並發執行的,並非順序執行。
(2) newFixedThreadPool(int) 返回 ExecutorService 實例,創建的是有界線線程池,即線程個數可以指定最大數量,如果超過最大數量,則後加入的線程需要等待。
還有api:newFixedThreadPool(int , ThreadFactory),newCachedThreadPool( ThreadFactory ) 方法同理。
(3) newSingleThreadExecutor() 創建單一線程池,實現以隊列的方式來執行任務。
2、ThreadPoolExecutor 的使用:
Executors 工廠類中,很多地方是調用的 ThreadPoolExecutor 來實現的,單獨調用 ThreadPoolExecutor 要考慮的相對要多一些但也更靈活。
【Java並發核心四】Executor 與 ThreadPoolExecutor