Future 接口
boolean cancel(
boolean isCancelled();
boolean isDone();
V get()
-----------------------實現future接口的類(都叫做一個task,因為是一個任務一段邏輯),一般都會被放到一個線程裏,但是新開線程的執行是異步的,但是如果此時要獲取線程執行的結果,就需要基於cas+volatile,實現future接口,看看這個邏輯走完了沒。
比如isdone方法,取消,還有get方法看結果。
實現的類一般都會有一個status(volatile的),一個outcome用來存儲結果,還有一個callable引用,指向一個實現了callable接口的對象,這個對象重寫call方法,而實現Future接口的類 如果實現了, 實現Runnable接口(RunnableFuture接口),會重寫其中的run方法。
run方法中一般會調用call方法,call方法和run方法不同的是,它有返回值,那麽就可以賦值給outcome,然後根據狀態,來進行線程之間的通信。比如:FutureTask
當然,實現了Future接口的類也可以不實現runnable接口,而由線程池調用它的call方法。比如ForkJoinTask RecursiveTask。forkjoinPool的invoke方法是調用 task的invoke方法。forkjointask 的invoke 方法調用exec(),繼承的RecursiveTask方法重寫了exec(),調用一個
compute方法,返回值賦值給result(通過調用getResult類似的方法,而recursive方法重寫了該方法,返回的是recursivetask的屬性result(泛型))
Future 接口