關於ExecutorService的介紹可以參考
https://blog.csdn.net/suifeng3051/article/details/49443835
簡單來說這個類可以提供線程來做一些工作,可以說是對thread做了封裝管理吧。。。用起來還是挺方便的。。。
創建線程池的方法
該類爲工廠類,通過調用不同的create函數來創建不同類型的線程池,如下是提供的幾種類型的線程池
- newCachedThreadPool 創建一個可緩存線程池,如果線程池長度超過處理需要,可靈活回收空閒線程,若無可回收,則新建線程。
- newFixedThreadPool 創建一個定長線程池,可控制線程最大併發數,超出的線程會在隊列中等待。
- newScheduledThreadPool 創建一個定長線程池,支持定時及週期性任務執行。
- newSingleThreadExecutor 創建一個單線程化的線程池,它只會用唯一的工作線程來執行任務,保證所有任務按照指定順序(FIFO, LIFO, 優先級)執行。
啓動線程的方法:
調用方法支持如下幾種
- execute(Runnable)
- submit(Runnable)
- submit(Callable)
- invokeAny(...)
- invokeAll(...)
submit(Runnable)和execute(Runnable)區別是前者可以返回一個Future對象,通過返回的Future對象,我們可以檢查提交的任務是否執行完畢。
結束線程的方法
- ExecutorService.shutdown:等待線程中的任務運行完成時再結束線程
- ExecutorService.shutdownNow:立刻執行所有線程中正在執行的任務