參考來自:慕課網spa
建立線程開銷大,線程池的做用就是預先創建好線程,等待任務派發。線程
主要由兩部分組成:線程+派發任務的queue。全部的線程都會從隊列的頭部獲取任務。若是隊列是空的,線程就會一直等待,直到有任務進來。3d
使用方法:建立一個線程池,而後往隊列中聽任務。code
經常使用使用方法:blog
1 ExecutorService executor = Executors.newFixedThreadPool(30);
其實這只是封裝了一下,最終使用的仍是ThreadPoolExecutor。隊列
任務的派發:能夠看見右邊的執行,是先開始了3個任務,由於在定義中設置了大小爲3。it
這裏的submit()方法裏能夠接受Runnable類型的參數,也能夠接受Callable類型的參數。區別是:Callable有返回值。class
若是想要知道執行任務時的一些信息好比執行成功了嗎或者想要取消任務,能夠使用Future。線程池