執行緒池ExecutorService
執行緒池: 任務提交到執行緒池,而不是直接交給某執行緒,執行緒池拿到任務後,它在內部找空閒的執行緒進行執行(封裝),任務是提交給執行緒池,一個執行緒只能執行一個任務,但可以同時向一個執行緒池提交多個任務。
建立固定大小的執行緒池
建立快取執行緒池
如何實現執行緒死掉後重新啟動?
答案:建立單一執行緒池Executors.newSingleThreadExecutor();
關閉執行緒池
shutdown() 執行緒池中都處於空閒是結束執行緒池
shutdownNow()執行緒池不管是否有任務在執行都停止
例子:
//執行緒池
public class ThreadPool {
public static void main(String[] args) {
ExecutorService executorService = Executors.newFixedThreadPool(1);
Runnable command = new Runnable() {
@Override
public void run() {
System.out.println("1"+Thread.currentThread().getName());
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
};
executorService.execute(command);
executorService.execute(command);
executorService.execute(command);
executorService.execute(command);
executorService.execute(command);
executorService.shutdown();
}
}
輸出:
1pool-1-thread-1
1pool-1-thread-1
1pool-1-thread-1
1pool-1-thread-1
1pool-1-thread-1
都是一個執行緒在執行這些任務;在3s執行下一個
----------------------------------------------------------------------
執行緒池啟動定時器
呼叫ScheduledExecutorService的schedule方法,返回的ScheduleFuture物件可以取消任務。
支援間隔重複任務的定時方式,不直接支援絕對定時方式,需要轉換成相對時間方式。
Executors.newSchdeduledThreadPool(3).schedule (....)