(十三) 說一下runnable 和 callable 有什麼區別?Future是什麼?
微信搜尋《Java魚仔》,每天一個知識點不錯過
所有內容以及歷史知識點均會更新到github上,歡迎star
(一)每天一個知識點
說一下runnable 和 callable 有什麼區別?FutureTask是什麼?
(二)回答
2.1 runnable和callable的區別
runnable和callable都可以用來編寫多執行緒程式,兩者的區別在於:
1.實現了runnable介面後無法返回結果資訊,實現了callable介面後有返回值。
2.實現了runnable介面異常無法通過throws丟擲異常,實現了callable介面後可以直接丟擲Exception異常
2.2 Future是什麼?
在使用callable介面實現多執行緒時,我們會用到FutureTask去獲取返回值,那麼Future和FutureTask是什麼?
Future是一個獲取非同步計算結果的介面,而FutureTask是Future的一個實現類。
public interface Future<V> {
boolean cancel(boolean mayInterruptIfRunning);
boolean isCancelled();
boolean isDone();
V get() throws InterruptedException, ExecutionException;
V get(long timeout, TimeUnit unit)
throws InterruptedException, ExecutionException, TimeoutException;
}
future介面的原始碼很簡單,它實現了五個方法
boolean cancel(boolean mayInterruptRunning) :如果任務還沒開始,執行cancel(…)方法將返回false;如果任務已經啟動,執行cancel(true)方法將以中斷執行此任務執行緒的方式來試圖停止任務,如果停止成功,返回true;當任務已經啟動,執行cancel(false)方法將不會對正在執行的任務執行緒產生影響(讓執行緒正常執行到完成),此時返回false;當任務已經完成,執行cancel(…)方法將返回false。mayInterruptRunning參數列示是否中斷執行中的執行緒。
boolean isCanceller() :如果任務完成前被取消,則返回true。
boolean isDone() :如果任務執行結束,無論是正常結束或是中途取消還是發生異常,都返回true。
V get() :獲取非同步執行的結果,如果沒有結果可用,此方法會阻塞直到非同步計算完成。
V get(Long timeout , TimeUnit unit) :獲取非同步執行結果,如果沒有結果可用,此方法會阻塞,但是會有時間限制,如果阻塞時間超過設定的timeout時間,該方法將丟擲異常。
總結起來Future實現以下幾個功能:可以中斷正在執行的任務、可以判斷任務是否還在執行、可以獲取到任務執行後的結果。FutureTask是Future介面一個比較常用的實現類
相關文章
- 老徐和阿珍的故事:Runnable和Callable有什麼不同?
- cookie是什麼?和session有什麼區別?CookieSession
- Java和Python是什麼?有什麼區別?JavaPython
- 什麼是 MicroPython?和CPython有什麼區別?Python
- xpgu是什麼 xgpu和xgp有什麼區別GPU
- linux和ubuntu區別是什麼?有什麼關係?LinuxUbuntu
- 什麼是報表工具?和 EXCEL 有什麼區別?Excel
- Java 介面和抽象類是什麼,有什麼區別Java抽象
- 什麼是SCRM系統?和CRM有什麼區別?
- png是什麼格式 png和jpg有什麼區別
- Runnable,Callable,Future關係淺析
- MySQL、NoSQL分別是什麼?有什麼區別?MySql
- CRM和CRM系統是什麼意思,有什麼區別?
- 反向代理是什麼?和正向代理有什麼區別呢?
- 什麼是python?與PHP有什麼區別?PythonPHP
- 搞懂Runnable Callable Future FutureTask 及應用
- 優思學院|CTP和CTQ是什麼?有什麼區別?
- 什麼是Asp.net Core?和 .net core有什麼區別?ASP.NET
- Python和Go是什麼?它們之間有什麼區別?PythonGo
- 什麼是Python直譯器?和Python IDE有什麼區別?PythonIDE
- 等保1.0和2.0分別是什麼?兩者有什麼區別?
- Session是什麼?它與Cookie有什麼區別?SessionCookie
- cython和python分別是什麼?區別有哪些?Python
- 記憶體科普:DIMM是指什麼,和DDR有什麼區別?記憶體
- sem和seo有什麼區別?各自的優劣勢是什麼?
- 什麼是Linux?和Unix之間有什麼較大的區別?Linux
- k8s和Docker是什麼?兩者有什麼區別?K8SDocker
- 靜態IP是什麼意思?和動態IP 有什麼區別
- 電腦gpu是什麼意思 gpu和cpu有什麼區別不同GPU
- 原生IP是什麼?與其他IP有什麼區別?
- HTTP和HTTPS是什麼 二者區別是什麼HTTP
- 什麼是PCB?什麼是PCBA?PCB和PCBA的區別?
- 什麼是SRE工程師?SRE工程師和運維有什麼區別?工程師運維
- 雲電視和智慧電視是什麼,之間有什麼區別?
- 什麼是DNS雲解析?雲解析和普通解析有什麼區別?DNS
- shim和polyfill有什麼區別
- vue和react有什麼區別?VueReact
- modbus和tcp有什麼區別?TCP