studio programacion móviles libros libro desarrollo desarrollar curso aprende aplicaciones java concurrency executorservice future

java - móviles - manual de programacion android pdf



¿Un tiempo de espera futuro mata la ejecución del hilo? (3)

Cuando Runnable un ExecutorService y objetos Future (al enviar tareas Runnable ), si especifico un valor de tiempo de espera para la función get del futuro, ¿se TimeoutException el hilo subyacente cuando se lanza una TimeoutException ?


No es asi. ¿Por qué lo haría? A menos que usted lo diga.

Aquí hay una preocupación muy válida en caso de un Llamado, por ejemplo. Si esperaste el resultado por digamos 20 segundos y no lo obtuviste, entonces ya no estás interesado en el resultado. En ese momento debe cancelar la tarea en absoluto.

Algo como esto:

Future<?> future = service.submit(new MyCallable()); try { future.get(100, TimeUnit.MILLISECONDS); } catch (Exception e){ e.printStackTrace(); future.cancel(true); //this method will stop the running underlying task }


No, no. Además, ni siquiera hay intento de interrumpir la tarea. En primer lugar Future.get con tiempo de espera no lo dice. En segundo lugar, prueba mi prueba para ver cómo se comporta

ExecutorService ex = Executors.newSingleThreadExecutor(); Future<?> f = ex.submit(new Runnable() { public void run() { try { Thread.sleep(2000); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("finished"); } }); f.get(1, TimeUnit.SECONDS);

en 1 segundo imprime

Exception in thread "main" java.util.concurrent.TimeoutException at java.util.concurrent.FutureTask$Sync.innerGet(FutureTask.java:228) at java.util.concurrent.FutureTask.get(FutureTask.java:91) at Test1.main(Test1.java:23)

después de otro 1 segundo, la tarea termina exitosamente

finished