Interfaz Java.util.concurrent.ExecutorService con ejemplos

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

Deja una respuesta

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