Executor
框架的兩級調度模型(基於HotSpot)Executor
框架)將這些任務映射爲固定數量的線程;任務的兩級調度模型小程序
Runnable
接口或Callable
接口。Executor
,以及繼承自Executor
的ExecutorService
接口。Executor
框架有兩個關鍵類實現了ExecutorService
接口(ThreadPoolExecutor
和ScheduledThreadPoolExecutor
)。Future
和實現Future
接口的FutureTask
類。類與接口數組
ThreadPoolExecutor
:一般使用工廠類Executors
來建立。
SingleThreadExecutor
須要保證順序地執行
各個任務;而且在任意時間點,不會有多個線程是活動的應用場景。FixedThreadPool
負載比較重
的服務器。CachedThreadPool
執行不少的短時間異步任務
的小程序,或者是負載較輕
的服務器。ScheduledThreadPoolExecutor
:一般使用工廠類Executors
來建立.
Future
接口
Runnable
接口和Callable
接口
Runnable
不會返回結果。Callable
能夠返回結果。ThreadPoolExecutor
詳解corePool
:核心線程池的大小。maximumPool
:最大線程池的大小。BlockingQueue
:用來暫時保存任務的工做隊列。RejectedExecutionHandler
:當ThreadPoolExecutor
已經關閉或ThreadPoolExecutor
已經飽和時(達到了最大線程池大小且工做隊列已滿),execute()
方法將要調用的Handler
。FixedThreadPool
LinkedBlockingQueue
做爲線程池的工做隊列(隊列的容量爲Integer.MAX_VALUE。SingleThreadExecutor
worker
線程的Executor
。LinkedBlockingQueue
做爲線程池的工做隊列(隊列的容量爲Integer.MAX_VALUE。CachedThreadPool
ScheduledThreadPoolExecutor
詳解
ScheduledThreadPoolExecutor 運行機制圖緩存
Java裏的阻塞隊列服務器
ArrayBlockingQueue:數組有界阻塞隊列,默認線程非公平的訪問隊列,公平性是使用可重入鎖實現多線程
public ArrayBlockingQueue(int capacity, boolean fair) { if (capacity <= 0) throw new IllegalArgumentException(); this.items = new Object[capacity]; lock = new ReentrantLock(fair); notEmpty = lock.newCondition(); notFull = lock.newCondition(); }