2012-08-02 18 views
5

He comprobado API Java de Oracle, lo que da algo de información que FutureTask.isDone()Java FutureTask cheque finalización

pero tengo que comprobar si la tarea se ha completado o terminado con cualquier error. El método isDone() se devolverá incluso si se completa/finaliza. Pero necesito saber si se completó o finalizó debido a algún problema.

Respuesta

11

Si el FutureTask está hecho, llame al get() después (puede ser sin tiempo de espera, debe devolver inmediatamente). Tampoco volverá algún resultado o tirar:

ExecutionException - si el cómputo inició una excepción

ExecutionException.getCause() devolverá la excepción lanzada de su tarea.

+0

Puede llamar a 'get()' incluso si 'FutureTask' aún no está hecho; en este caso, 'get()' espera la finalización. – Pino

0

¿Por qué no llamar al FutureTask.get()?

Esto devolverá el resultado o arrojará una excepción que contenga la excepción originalmente arrojada/capturada. Si la tarea no se ha completado, dit bloqueará, y usted tiene la opción de proporcionar un tiempo de espera.

lo haría normalmente esperan que los clientes simplemente para llamar get() en cada FutureTask a su vez, una vez creado, en lugar de sondean isDone().

0

Cuando isDone() devuelve true, desea obtener un resultado llamando al método get() para verificar el resultado de la ejecución. get() operación puede lanzar ExecutionException, que consisten en causa, donde puede encontrar un problema.

+1

Puede llamar a 'get()' incluso si 'isDone()' aún es falso; en este caso, 'get()' espera la finalización. – Pino

Cuestiones relacionadas