Threads: Devolver valores desde un Hilo

Seguro que en más de una ocasión habéis necesitado devolver un valor desde un Thread en Java…

…probablemente alguna vez hayáis hecho algo como esto:

Java ofrece desde la versión 1.5 soporte para devolver valores como resultado de la ejecución de un Thread.

Para eso es lugar de usar el interfaz Runnable debemos usar el interfaz Callable, este interfaz permite devolver valores al final de su ejecución:

import java.util.concurrent.Callable;

public class MyCallable implements Callable<Integer> {

@Override

public Integer call() throws Exception {

int sum = 0;

for (integer i = 0; i <= 100; i++) {

sum += i;

}

return sum;

}

}

Para poder ejecutar el Callable necesitamos hacer uso del framework Executor (incluido también en Java 1.5 y que ofrece entre otras cosas Pools de Hilos).

En el caso más sencillo, un SingleThreadExecutor tendría:

FutureTask task = new FutureTask (new MyCallable ());

ExecutorService es = Executors.newSingleThreadExecutor ();

es.submit (task);

try {

int result = task.get ();

System.out.println («Resultado obtenido de ejecución del Callable= » + result);

}

catch (Exception e) {

System.err.println (e);

}

es.shutdown ();

Sencillo, verdad?

Respuestas

  1. […] el post Threads: Devolver valores desde un Hilo volvemos al tema de los Callables y el interfaz […]

  2. Avatar de Uelsen Acosta

    no puedo resolver un error en la linea que contiene int result = task.get();

  3. Se soluciona haciendo un cast :::::: int result = (Integer)task.get();

  4. Gracias amigo 😀 fue de mucha utilidad tu ejemplo 😀 Saludos.

Deja un comentario