La interfaz ExecutorService amplía Executor al agregar métodos que ayudan a administrar y controlar la ejecución de subprocesos. Se define en el paquete java.util.concurrent . Define métodos que ejecutan los hilos que devuelven resultados, un conjunto de hilos que determinan el estado de apagado. La interfaz ExecutorService se implementa en una clase de utilidad llamada Executors . Define métodos que proporcionan una implementación de la interfaz ExecutorService y muchas otras interfaces, con algunas configuraciones predeterminadas.
La jerarquía de clases es la siguiente:
--> java.util.concurrent Package --> Interface ExecutorService Class
Nota: ScheduledExecutorService está implementando subinterfaces y las clases implementadas son las siguientes:
- AbstractExecutorServiceAbstractExecutorService
- TenedorÚnetePiscina
- ScheduledThreadPoolExecutor
- ThreadPoolExecutor
Métodos en la interfaz del ejecutor
Método | Acción realizada |
---|---|
esperarTerminación() | Espera a que todas las tareas completen su ejecución después de encontrar una solicitud de apagado. Espera el tiempo especificado por el argumento de límite de tiempo |
invocarTodo() | Ejecuta todas las tareas contenidas en la colección. Se devuelve la lista de objetos futuros que contiene el estado y los valores de retorno de las diversas tareas. |
invocarCualquiera() | Ejecuta todas las tareas contenidas en la colección. Al completar una sola tarea, devuelve su resultado y todas las demás tareas se cancelan. |
esApagado() | Indica si el ejecutor que invoca está cerrado o no. Devuelve verdadero si el apagado de lo contrario devuelve falso |
esta terminado() | Comprueba si todas las tareas se han completado después del apagado. Devuelve verdadero si se completa, de lo contrario devuelve falso. |
cerrar() | Hace que todas las tareas que se están ejecutando finalicen después de completarse en el orden en que se iniciaron y rechaza cualquier nueva tarea entrante. |
apagar ahora() | Finaliza a la fuerza todas las tareas, independientemente de su estado actual, es decir, en ejecución, en espera o lista. Las listas de tareas estaban en un estado listo a cambio. |
enviar() | Agrega una tarea que devuelve un resultado a la lista de tareas en ejecución para su ejecución. Devuelve un objeto Future que devuelve el resultado de la tarea una vez finalizada. |
Implementación: Ejecutores
Java
// Java Program to Demonstrate ExecutorService Interface // Importing required classes import java.util.concurrent.*; // Class // Main class public class SimpleExecutor { // Main driver method public static void main(String[] args) { // Creating objects of CountDownLatch class CountDownLatch cd1 = new CountDownLatch(5); CountDownLatch cd2 = new CountDownLatch(5); CountDownLatch cd3 = new CountDownLatch(5); CountDownLatch cd4 = new CountDownLatch(5); // Creating objects of ExecutorService class ExecutorService es = Executors.newFixedThreadPool(2); // Display message only for better readability System.out.println("Starting"); // Executing the tasks es.execute(new MyThread(cd1, "A")); es.execute(new MyThread(cd2, "B")); es.execute(new MyThread(cd3, "C")); es.execute(new MyThread(cd4, "D")); // Try block to check for exceptions try { // Waiting for tasks to complete cd1.await(); cd2.await(); cd3.await(); cd4.await(); } // Catch block to handle exceptions catch (InterruptedException e) { System.out.println(e); } // Making all current executing threads to terminate es.shutdown(); // Display message only for better readability System.out.println("Done"); } } // Class 2 // Helper class class MyThread implements Runnable { // Class data members String name; CountDownLatch latch; // Constructor MyThread(CountDownLatch latch, String name) { // this keyword refers to current instance itself this.name = name; this.latch = latch; new Thread(this); } // Method // Called automatically when thread is started public void run() { for (int i = 0; i < 5; i++) { System.out.println(name + ": " + i); latch.countDown(); } } }
Producción:
Publicación traducida automáticamente
Artículo escrito por CharchitKapoor y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA