Ejemplo de Future && FutreTask && Callable java 1.6

Al trabajar con hilos en Java tenemos el interfaz Runnable. El Runnable en Java no devuelven valores:

package javaapplication3;
/**
 *
 * @author luxo
 */
public class Myrunnable implements Runnable{

    @Override
    public void run() {
        throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
    }
    
}
    Si se necesita que el hilo devuelva valores al proceso que lo invoca se debe usar Callable que permite devolver valores después de que se haya completado su ejecución.
/**
     * PROCESO para enviar en paralello en varios therad que usan Future para
     * hacer join de los thread Si necesito que mi hilo devuelva valores al
     * proceso que lo invoca tengo que usar Callable que permite devolver
     * valores después de que se haya completado su ejecución.
     *
     * @param listEquipos
     * @param operacion
     * @return
     */
    private List ejecutarEnParalelo(HashMap listEquipos) {

        List> callables = new ArrayList>();
        List> futures = new ArrayList>();

        ExecutorService pool = Executors.newFixedThreadPool(fraudThreadCount);

        for (Map.Entry entry : listEquipos.entrySet()) {
            callables.add(new TaskCallable(entry.getValue()));
        }

        for (Callable c : callables) {
            futures.add(pool.submit(c));
        }

        ArrayList respuesta = new ArrayList();

        for (Future f : futures) {
            try {
                respuesta.add(f.get());
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        return respuesta;
    }


Clase que implementa el Callable:(Cuando metamos los Callables en el Executor)

    /**
     * Clases para ejecucion en paralelo
     */
    class TaskCallable implements Callable {

        SplunkFile file;

        TaskCallable(SplunkFile file) {
            this.file = file;
        }

        @Override
        public RespuestaPPBAM call() throws Exception {
            return NotificaFraude(file);
        }

    }


este devolverá un java.util.concurrent.Future, que permite comprobar el estado de un Callable.
OJO con las variables o metodos static que se usen en los Callable, estos pueden arrojar null si se detienen en tiempo de ejecución.

No hay comentarios.:

Problemas de activación WIFI6 en LG_OLED55CXPSA

  Mi experiencia con este TV  ah sido impecable hasta ahora, llevaba un uso normal y no tenia que usar la conexión por wifi ya que tengo una...