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!!!
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! :)
Cuando se hace uso de programas a veces no importa que este cree más de una instancia al mismo tiempo, por ejemplo podem...
En este post crearemos un componente gráfico para java que nos permitirá seleccionar la hora del día de una manera senci...
Comenzando este tutorial, primero necesitamos definir la «estructura» de nuestro proyecto. Haremos uso del IDE de Dreamw...
Si nuestra aplicación tiene que llevar a cabo un cierto trabajo que no sabemos cuanto durará y que a la vez consume much...
Una Vista (View) es una Tabla Virtual cuyo contenido está definido por una consulta (SELECT), al igual que una tabla rea...
Un BLOB en SQL es un tipo incorporado que almacena un Objeto Binario Grande como un valor de columna en una fila de una...
Los comentarios estan cerrados
El gigante tecnologico Google a puesto un bonito Doodle en su buscador que esta fascinando a sus millones de usuarios qu...
WhatsApp anuncio a través de su blog que ya se encuentra disponible la función de envío de fotos y videos TEMPORALES, es...
Muchas de las innovaciones computacionales de la NASA se desarrollaron para ayudar a explorar el espacio, pero ahora la...
TikTok es una plataforma de microvideos muy popular entre los jóvenes el cual cuenta ya con millones de videos cortps de...
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…