ForkJoinTask<V> is a lightweight thread-like
ForkJoinTask 主要的方法
fork() and join()fork()在非ForkJoinWorkerThread呼叫會拋出java.lang.ClassCastException
單獨呼叫join()會一直等待ForkJoinTask 完成
還有一些其他方法
如
invoke()此方法會執行fork() + join()但他只會在當前的執行緒執行
invokeAll ()他不會有回傳值或錯誤訊息,此方法只可在ForkJoinPool computations使用不然可能會產生ClassCastException的異常或錯誤。當
invokeAll 內所有的task都isDone 後才會返回,如當碰到Execption會回傳此Execption其他任務可能會取消!isDone()回傳true 表示task做完了但不保證他是被取消還是其他狀態
isCompletedNormally() 回傳true表示正常完成isCancelled() 表示此Ttask被取消了isCompletedAbnormally() 表示此任務可能因為cancelled or encountered an exception 此時可使用 getException()isCancelled()為真,如果該任務已被取消(在這種情況下getException()返回CancellationException,); isCompletedAbnormally()為true的,如果一個任務被取消或遇到異常,在這種情況下,getException()將返回所遇到的異常或CancellationException。
在ForJoinTask正常狀況
TestForJoin...
12Howard getException:null
Howard isDone2:true
Howard isCancelled2:false
Howard isCompletedAbnormally2:false
Howard isCompletedNormally2:true
completeExceptionally(new
Exception()) 此方法會拋出Exception
在ForJoinTask中呼叫completeExceptionally(new
Exception())ForkJoinTask狀態如下
Howard getException:Exception
Howard isDone2:true
Howard isCancelled2:false
Howard isCompletedAbnormally2:true
Howard isCompletedNormally2:false
在ForJoinTask中呼叫: this.cancel(true);
TestForJoin...
Howard getException:java.util.concurrent.CancellationException
Howard isDone2:true
Howard isCancelled2:true
Howard isCompletedAbnormally2:true
Howard isCompletedNormally2:false
沒有留言:
張貼留言