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.
Y como resultado tendremos:
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!!!
En este post, escribiremos un sencillo plugin para wordpress el cual consistirá en reemplazar palabras en los comentario[...]
En este post, crearemos una aplicación java que nos permita arrastrar un archivo excel hacia la aplicación, abrirlo y ca[...]
Cuando desarrollamos aplicaciones en java con base de datos debemos tener cuidado en que se cumplan un conjunto de carac[...]
¿Alguna vez tuviste la necesidad de hacer una captura de pantalla de una página web? Si es así, seguramente buscaste y d[...]
Java Help es (o era) una librería para java que permitía añadir ventanas de ayuda HTML a nuestros proyectos, al ser una[...]
Los JavaBeans son clases que encapsulan objetos en un solo objeto (beans). Son fáciles de crear y pueden contener muchos[...]