Java并發編程:Callable、Future和FutureTask
run無返回值,call有返回值.png
Paste_Image.png
/**
* 其中Runnable實現的是void run()方法,無返回值;
* Callable實現的是V call()方法,并且可以返回執行結果。
* 其中Runnable可以提交給Thread來包裝下,直接啟動一個線程來執行,而Callable則一般都是提交給ExecutorService來執行
* 提交Runnable則沒有返回值,futurn沒有數據
* 使用submit提交任務會返回Future對象,而使用execute沒有返回值。
* submit提交Runnable任務本質上也是轉化為Callable去執行
*/
Future就是對于具體的Runnable或者Callable任務的執行結果進行取消、查詢是否完成、獲取結果。必要時可以通過get方法獲取執行結果,該方法會阻塞直到任務返回結果。
也就是說Future提供了三種功能:
1)判斷任務是否完成;
2)能夠中斷任務;
3)能夠獲取任務執行結果。
因為Future只是一個接口,所以是無法直接用來創建對象使用的,因此就有了下面的FutureTask。
run無返回值故需要參數V來帶回結果.png
即使使用第二種構造器public FutureTask(Runnable runnable ,V result ) Runnable注入會被Executors.callable()函數轉換為Callable類型,即FutureTask最終都是執行Callable類型的任務