2012-08-02 9 views
5

Ho controllato API Java di Oracle, che dà alcune informazioni che FutureTask.isDone()Java FutureTask controllo completamento

ma ho bisogno di controllare se il compito è completato o terminato con qualsiasi errore. isDone() restituirà il metodo anche se completa/termina. Ma ho bisogno di sapere se è completato o terminato a causa di qualche problema.

risposta

11

Se il FutureTask è terminato, chiamare in seguito get() (può essere senza timeout, dovrebbe restituire immediatamente). Essa sarà o tornare qualche risultato o buttare:

ExecutionException - se il calcolo ha generato un'eccezione

ExecutionException.getCause() restituirà l'eccezione generata dal vostro compito.

+0

È possibile chiamare 'get()' anche se 'FutureTask' non è stato ancora completato; in questo caso 'get()' attende il completamento. – Pino

0

Perché non chiamare FutureTask.get()?

Ciò restituirà il risultato o genererà un'eccezione contenente l'eccezione originariamente generata/catturata. Se l'attività non è stata completata, dit verrà bloccato e si avrà la possibilità di fornire un timeout.

vorrei normalmente si aspettano i clienti di chiamare semplicemente get() su ogni FutureTask a sua volta, una volta creato, piuttosto che il polling isDone().

0

Quando isDone() restituisce true si desidera ottenere risultato chiamando il metodo get() per verificare il risultato dell'esecuzione. L'operazione get() può generare ExecutionException, che consiste di causa, dove è possibile trovare un problema.

+1

Puoi chiamare 'get()' anche se 'isDone()' è ancora falso; in questo caso 'get()' attende il completamento. – Pino