很多朋友都想知道java future是什么,下面就一起來了解一下吧~
Future代表一個異步計算的結果,并且它提供一些方法來讓調用者檢測異步過程是否完成,或者取得異步計算的結果,或者取消正在執行的異步任務。
public?class?Test?{ ????private?static?ExecutorService?executorService?=?Executors.newSingleThreadExecutor(); ????public?static?void?main(String[]args){ ????????System.out.println("hello?world"); ????????Futurefuture?=?calcute(9); ????????while?(!future.isDone()){ ????????????try?{ ????????????????Thread.sleep(100); ????????????}?catch?(InterruptedException?e)?{ ????????????????e.printStackTrace(); ????????????}?finally?{ ????????????????System.out.println("正在執行"); ????????????} ????????} ????????try?{ ????????????int?result?=?future.get(); ????????????System.out.println("result?=?"?+?result); ????????}?catch?(ExecutionException?e)?{ ????????????e.printStackTrace(); ????????}?catch?(InterruptedException?e)?{ ????????????e.printStackTrace(); ????????} ????} ???? ????public?static?Future calcute(Integer?i)?{ ????????return?executorService.submit(()?->?{ ????????????Thread.sleep(1000); ????????????System.out.println("return?future?for?"?+?i); ????????????return?i?*i; ????????}); ????}}
一個簡單Future使用用例寫完,使用線程池+Callback+Future,完成了一個簡單的計算操作。
Future是一個接口,先看一下內部方法:
public?interface?Future?{ ????boolean?cancel(boolean?var1); ????boolean?isCancelled(); ????boolean?isDone(); ????V?get()?throws?ExecutionException,?InterruptedException; ????V?get(long?var1,?TimeUnit?var3)?throws?ExecutionException,?InterruptedException,?TimeoutException;}
get()函數是返回計算結果,注意get會同步操作,沒有返回結果前,會阻塞線程。get還有一個重載函數get(long var1, TimeUnit var3),第一個參數是時長,第二個是單位。表示在多少時長內獲取結果,如果仍未返回,則拋出異常TimeoutException。
try{ ????int?result2?=?future2.get(1000,?TimeUnit.MILLISECONDS);}?catch(TimeoutException?e)?{ ????e.printStackTrace();}
cancel(boolean) 表示是否取消該future,
不能在調用cancel(true)/cancel(false)后,調用get()函數,否則會拋出異常CancellationException
isCancelled()函數是判斷該future是否已取消
isDone()函數是判斷該future是否已完成
isDone()函數是實時狀態讀取,不會阻塞線程。
Callback
Callback 是一個接口,內部只有一個函數
@FunctionalInterfacepublic?interface?Callable?{ ????V?call()?throws?Exception;}
以上就是小編今天的分享,希望可以幫到大家。