Aprende Java Aprende Php Aprende C++ Aprende HTML 5 Aprende JavaScript Aprende JSON Aprende MySQL Aprende SQLServer Aprende Visual Basic 6 Aprende PostgreSQL Aprende SQLite Aprende Redis Aprende Kotlin Aprende XML Aprende Linux VSC Aprende Wordpress Aprende Laravel Aprende VueJS Aprende JQuery Aprende Bootstrap Aprende Netbeans Aprende Android
Sigueme en Facebook Sigueme en Twitter Sigueme en Instagram Sigueme en Youtube Sigueme en TikTok Sigueme en Whatsapp
Home / Java / ExecutorService: Tareas asíncronas

ExecutorService: Tareas asíncronas

Por 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

Artículos similares

Crea un JButton con sonido para tus aplicaciones

En este post crearemos un botón swing que reproducirá un sonido cuando este sea presionado por el usuario.  Sin mas[...]

Como crear un Grid en Pygame

Utilizando pygame para hacer gráficos en python, se muestra a continuación un sencillo ejemplo de cómo utilizar esta lib[...]

Chusakeri: Software Educativo para realizar sumas mentales

Las matemáticas son fundamentales para la vida y aparte de las actividades clásicas de enseñanza desarrolladas en el aul[...]

Compartir texto plano con un ShareActionProvider en Android

Un Action Provider es un elemento que habita en la Action Bar para incrementar la accesibilidad de nuestras aplicaciones[...]

Crea un Tabbed Activity desde cero

Un Tabbed Activity te permite cambiar la vista entre  fragmentos desplazando el dedo  de izquierda a derecha o de derech[...]

UML Java: easyUML plugins para Netbeans

easyUML es una herramienta para crear diagramas UML para NetBeans de forma visual. Adecuado para el aprendizaje de este[...]