# Runnable、Callable、Future、ExecutorService [參考網頁1](https://codertw.com/%E7%A8%8B%E5%BC%8F%E8%AA%9E%E8%A8%80/312035/) [參考網頁2](https://dotblogs.com.tw/grayyin/2016/07/04/113501) [參考網頁3](https://medium.com/@JamesQI/executorservice-and-thread-pool-4612359b74ae) :::info 編寫多執行緒程式是為了實作多工的同步執行,從而能夠更好地提高執行速度。一般有三種方法, **Thread,Runnable,Callable.** ::: :::warning ### :bulb: Runnable和Callable的區別是, **(1)Callable規定的方法是call(),Runnable規定的方法是run().** **(2)Callable在執行後可返回值,而Runnable在執行後不能返回值** **(3)call方法可以拋出異常,run方法不可以** **(4)執行Callable會返回Future物件,表示非同步計算的結果。它提供了檢查計算是否完成的方法,以等待計算的完成,並檢索計算的結果。通過Future物件可以瞭解執行情況,可取消執行,還可獲取執行結果。** ::: :::info Executor就是Runnable和Callable的排程容器,**Future就是對於具體的Runnable或者Callable任務的執行結果進行取消、查詢是否完成、獲取結果、設定結果操作。** ::: :::warning ### :bulb:ExecutorService 的四種物件 **newFixThreadPool**:Create 一個 Thread Pool,必須指定 Thread Pool 最多能有幾條 Thread,每當 submit 一個任務(Task)就會 Create 一條 Thread 直到最大的限度。(如果 Thread 因為 Exception 而結束,Thread Pool 會補充一個新的 Thread) --- **newCachedThreadPool**:Create 一個 Thread Pool,這個 Pool 並無限制最多能容納幾條 Thread,會依據需求去 Create Thread 與 回收 Thread。 --- **newSingleThreadExecutor**:只會有一條 Thread,任務(Task)會依照一定的順序執行(ex:FIFO, LIFO)。(如果 Thread 因為 Exception 而結束,會有一個新的 Thread 取代原本的 Thread) --- **newScheduledThreadPool**:Create 一個 Thread Pool,必須指定 Thread Pool 最多能有幾條 Thread,支援周期性的任務(ex:每過10 秒執行一次 )或者延遲性任務(ex:10 秒後執行)。 ::: ###### tags: `ocpjp`
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up