Sigueme en Facebook Sigueme en Twitter Sigueme en Instagram Sigueme en Youtube
JC Mouse Bolivia
Index / Java / ExecutorService: Tareas asíncronas

ExecutorService: Tareas asíncronas

Autor jc mouse miércoles, julio 19, 2017

Desde java 7 esta disponible la interface ExecutorService que se extiende de Executor y nos proporciona los métodos necesarios para el trabajo con tareas asíncronas.

Una tarea asíncrona es una tarea cualquiera que lleva cierto tiempo en ejecutarse y que por ello es preferible ejecutar en un hilo secundario para que este no afecte las operaciones del hilo principal, por ejemplo, ahora mismo lees este articulo desde tu navegador pero debes tener 3 o 4 pestañas más abiertas ya sea descargando imágenes de youtube o revisando el facebook, pues eso son tareas asíncronas que puedes realizar desde tu navegador.

A continuación un ejemplo sencillo de como trabajar con ExecutorService,  esta clase no se instancia directamente, sino se obtiene a partir de la clase Executors el cual nos devuelve una interface ExecutorService al que podemos ir añadiendo tareas.

A continuación un ejemplo sencillo que realiza N tareas en el Thread Main pero a la vez ejecuta una tarea nueva en un nuevo Thread :

import java.util.Random;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
/**
 * @see https://www.jc-mouse.net/
 * @author jc mouse
 */
public class Main {

    public static void main(String[] args) {

        Random r = new Random();
        
        //operacion #1
        for (int i = 1; i <= 5; i++) {
            System.out.println("Thread Main Operacion 1: value(" + i + ")");
        }

        //operacion #2
        //termina operacion #1 inicia tarea en nuevo hilo
        ExecutorService executorService = Executors.newSingleThreadExecutor();
        executorService.execute(() -> {
            try {
                //operacion en nuevo hilo
                for (int i = 1; i <= 5; i++) {
                    System.out.println("Thread ExecutorService asynchronous task : value(" + i + ")");
                    Thread.sleep(r.nextInt(400) + 100);
                }
            } catch (InterruptedException ex) {
                ex.printStackTrace();
            }

        });
        executorService.shutdown();

        //operacion #3 en el hilo principal
        try {
            for (int i = 1; i <= 5; i++) {                
                System.out.println("Thread Main Operacion 3: value(" + i + ")");
                Thread.sleep(r.nextInt(400) + 100);
            }
        } catch (InterruptedException ex) {
            ex.printStackTrace();
        }

    }

}

En el siguiente diagrama podemos observar como el Thread Main delega una tarea nueva asíncrona pero continua ejecutando tareas en el hilo principal.

executors

Y como resultado tendremos:

asynchronous task

 

Podemos observar como la «operación 1» al ser un ciclo for, debe terminarse antes de comenzar otra operación, a continuación inicia otra operación for en un Thread secundario y a la vez ejecuta otro ciclo for (operación 3) en el Thread Main, como ambas operaciones se ejecutan en hilos paralelos en tiempos aleatorios cada que ejecutemos la aplicación obtendremos resultados diferentes.

enjoy!!!

Tags

Si te ha gustado podrías compartirlo o dejar un comentario. ¡Muchas gracias!
Autor: JC Mouse

Yo soy yo :) JC Mouse, Soy orgullosamente boliviano soy fundador y CEO de la web jc-Mouse.net uno de las pocas web en emprendimiento y tecnología en Bolivia.

Toda la información que encuentres en este sitio es y sera completamente gratis siempre, puedes copiar, descargar y re-publicar si así lo deseas en otros blogs o sitios web, solo te pido a cambio que dejes una referencia a esta web. Esto nos ayuda a crecer y seguir aportando. Bye

Enjoy! :)

También Te Podría Interesar

Números narcisistas o de Armstrong

Números narcisistas o de Armstrong

Los números narcisistas o números de Armstrong son aquellos números enteros positivos  cuya suma de las n-ésimas potenci...

Duplicando objetos con la Interface Cloneable

Duplicando objetos con la Interface Cloneable

En este post aprenderemos lo que es la clonación de objetos en java o lo que es lo mismo, generación de nuevas instancia...

Programación Shell: Estructuras de control

Programación Shell: Estructuras de control

Las estructuras de control de Shell son muy parecidos a otras lenguajes de programación. Las estructuras disponibles en...

Conoce Zoom la app para realizar webinars y videoconferencias

Conoce Zoom la app para realizar webinars y videoconferencias

Los cursos online se han convertido en algo común en nuestros días y las aplicaciones que hay en la nube para realizar r...

Hangman: El juego del ahorcado en java

Hangman: El juego del ahorcado en java

El Juego del ahorcado o Hangman, es un clásico juego de mesa que consiste en adivinar la palabra secreta, si no lo consi...

Mapas con HTML5 – Funciones de pintado – Parte 5

Mapas con HTML5 – Funciones de pintado – Parte 5

En esta penúltima parte, declaramos las funciones que nos permitirán pintar los shapes en el canvas, vamos al grano que...

1 comentario en “ExecutorService: Tareas asíncronas”

  1. Rubn dice:

    dog, gracias se entiende perfectamente pero una consulta, sabrás que estoy haciendo lectura de ficheros en un servlet, usando public void run() para hacerlo asyn, pero eso no es buena practica xq a la larga produce memory leaks o fugas de memoria, lo ideal es como expones acá, con ExcecutorServices, ahora el detalle es que el ExcecutorServices tiene el numero de tareas a ejecutar definidas, como haria para leer N ficheros disponibles a procesar ?…

    saludos…

Los comentarios estan cerrados

Comparte lo que sabes

Categorias

Últimas entradas

Las empresas GeoSystems e Inteligencia Geoespacial (Igeo) en coordinación con el Gobierno Nacional de Bolivia,  desarrol...

¿Sabia que por la pandemia que azota a la mayoría de los países de la Tierra, la mitad de la población estudiantil del m...

El gigante de la tecnología Microsoft ha lanzado un mapa interactivo para proporcionar información sobre la propagación...

El gigante de la informática Google, ante la reciente pandemia mundial declarada por la OMS (Organización Mundial de la...

Herramientas

Generador de Enlaces a Whatsapp