package Ġra ft . support Ċ Ċ import Ġcom . google . common . base . Preconditions Ċ import Ġcom . google . common . util . concurrent . Future Callback Ċ import Ġjava . util . concurrent . Callable Ċ import Ġjava . util . concurrent . Future Ċ import Ġjava . util . concurrent . Future Task ĊĊ Ċ class ĠDirect Task Executor ( private Ġvar Ġthrow When Failed : ĠBoolean ) Ġ: ĠAbstract Task Executor () Ġ{ ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . throw When Failed Ġ= Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġsubmit ( task : ĠRunnable ): ĠFuture < *> Ġ{ ĊĠĠĠĠĠĠĠ ĠPreconditions . checkNotNull ( task ) ĊĠĠĠĠĠĠĠ Ġval Ġfuture Task : ĠFuture Task < *> Ġ= ĠFuture Task < Any ? >( task , Ġnull ) ĊĠĠĠĠĠĠĠ Ġfuture Task . run () ĊĠĠĠĠĠĠĠ Ġreturn Ġfuture Task ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġsubmit ( task : ĠCallable < *> ): ĠFuture < *> Ġ{ ĊĠĠĠĠĠĠĠ ĠPreconditions . checkNotNull ( task ) ĊĠĠĠĠĠĠĠ Ġval Ġfuture Task Ġ= ĠFuture Task ( task ) ĊĠĠĠĠĠĠĠ Ġfuture Task . run () ĊĠĠĠĠĠĠĠ Ġreturn Ġfuture Task ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġsubmit ( task : ĠRunnable , Ġcallbacks : ĠCollection < Future Callback <* >>) Ġ{ ĊĠĠĠĠĠĠĠ ĠPreconditions . checkNotNull ( task ) ĊĠĠĠĠĠĠĠ ĠPreconditions . checkNotNull ( callbacks ) ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtask . run () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcallbacks . forEach Ġ{ Ġc Ġ-> Ġc . on Success ( null ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( t : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcallbacks . forEach Ġ{ Ġc Ġ-> Ġc . on Failure ( t ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( throw When Failed ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow Ġt ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Throws ( InterruptedException :: class ) ĊĠĠĠ Ġoverride Ġfun Ġshutdown () Ġ{ ĊĠĠĠ Ġ} ĊĊ Ċ }