1. Executor基於生產者-消費者模式,提交任務的操做至關於生產者,執行任務的線程至關於消費者,若是要在程序中實現一個生產者-消費者的設計,最簡單的方式一般就是使用Executorjava
2. Executor的生命週期:
爲了解決執行任務的生命週期問題,Executor擴展了ExecutorService接口,添加了一些用於生命週期管理的方法,以下:框架
public interface ExecutorService extends Executor{ void shutdown(); List<Runnable> shutdownNow(); boolean isShutDown(); boolean isTerminated(); boolean awaitTermination(long timeout, TimeUnit unit) throws InterruptedException; }
Executor執行的任務有4個生命週期階段:建立、提交、開始、完成。
在Executor框架中,已提交但還沒有開始的任務能夠取消,已開始的任務只有當它們能響應中斷時,才能取消。取消一個已經完成的任務不會有任何影響。線程
3. Timer與SheduledThreadPoolExecutor相比,有以下不一樣:
(1)Timer在執行全部定時任務時只會建立一個線程;
(2)Timer並不捕獲異常,所以當TimerTask拋出未檢查的異常時將終止定時線程。
(3)Timer支持基於絕對時間而不是相對時間的調度機制。設計
4. 線程的中斷:
Thread中的中斷方法以下:blog
public class Thread{ public void interrupt(){...} public boolean isInterrupted(){...} public static boolean interrupted(){...} }
阻塞庫方法,如Thread.sleep(), Object.wait()等,都會檢查線程什麼時候中斷,而且在發現中斷時提早返回,它們在響應中斷時執行的操做爲:清除中斷狀態,拋出InterruptedException,表示阻塞操做因爲中斷而提早結束。
對中斷操做的正確理解是:他不會真正的中斷一個正在運行的進程,而是隻發出中斷請求,而後由線程在下一個合適的時刻中斷本身。
使用靜態的interrupted時應當心,由於它會清除當前線程中的中斷狀態。接口