爲了減小建立和銷燬線程的次數,讓每一個線程能夠屢次使用,可根據系統狀況調整執行的線程數量,防止消耗過多內存,因此咱們可使用線程池.java
java中線程池的頂級接口是Executor(e可rai kei ter),ExecutorService是Executor的子類,也是真正的線程池接口,它提供了提交任務和關閉線程池等方法。調用submit方法提交任務還能夠返回一個Future(fei 曲兒)對象,利用該對象能夠了解任務執行狀況,得到任務的執行結果或取消任務。緩存
因爲線程池的配置比較複雜,JavaSE中定義了Executors類就是用來方便建立各類經常使用線程池的工具類。經過調用該工具類中的方法咱們能夠建立單線程池(newSingleThreadExecutor),固定數量的線程池(newFixedThreadPool),可緩存線程池(newCachedThreadPool),大小無限制的線程池(newScheduledThreadPool),比較經常使用的是固定數量的線程池和可緩存的線程池,固定數量的線程池是每提交一個任務就是一個線程,直到達到線程池的最大數量,而後後面進入等待隊列直到前面的任務完成才繼續執行.可緩存線程池是當線程池大小超過了處理任務所需的線程,那麼就會回收部分空閒(通常是60秒無執行)的線程,當有任務來時,又智能的添加新線程來執行.工具
Executors類中還定義了幾個線程池重要的參數,好比說int corePoolSize核心池的大小,也就是線程池中會維持不被釋放的線程數量.int maximumPoolSize線程池的最大線程數,表明這線程池彙總能建立多少線程。corePoolSize :核心線程數,若是運行的線程數少corePoolSize,當有新的任務過來時會建立新的線程來執行這個任務,即便線程池中有其餘的空閒的線程。maximumPoolSize:線程池中容許的最大線程數.線程