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 http://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

Crear XML desde una base de datos con jDom

Crear XML desde una base de datos con jDom

Un post cortito de fin de semana 🙂 , este trata de la forma de extraer la información de una base de datos formar una es...

Como hacer una factura en Java (Proyecto)

Como hacer una factura en Java (Proyecto)

Tiempo atras me pidieron un ejemplo de como realizar un reporte con iReport tipo factura, recibo o como le llamen, compl...

Bloquear orientación de la pantalla

Bloquear orientación de la pantalla

Cuando escribimos aplicaciones para android debemos tener cuidado al diseñar la interfaz en la posición que tomaran los...

Botón en java de Windows 8 Modern UI

Botón en java de Windows 8 Modern UI

En este tutorial crearemos un botón con el estilo del nuevo windows 8 Modern UI que primero se conoció como Metro UI.  E...

Detectar un punto dentro de un polígono HTML5

Detectar un punto dentro de un polígono HTML5

En un ejemplo anterior [Seleccionar y mover shapes en html5] se utilizo un método sencillo para detectar si un punto se...

Evaluar expresiones matemáticas en Java con JavaScript

Evaluar expresiones matemáticas en Java con JavaScript

Java 8 trae consigo una nueva versión del motor de JavaScript llamada Nashorn, este motor introduce mejoras de rendimien...

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

*

Comparte lo que sabes

Categorias

Últimas entradas

MAUS es una aplicación para dispositivos móviles con el Sistema Operativo Android que te permite realizar exámenes desde...

En este post crearemos una aplicación en Android Studio para conectarnos con nuestra base de datos de Firebase y leer al...

Firebase es la plataforma para el desarrollo de aplicaciones web y aplicaciones móviles de Google el cual se centra en e...

Si bien se puede hacer uso de archivos de imagen (jpg, png, bmp, etc) en las aplicaciones java, también este te permite...

Android Bolivia

Bandera en Alto