Cómo implementar una interfaz invocable en Java



Este artículo le proporcionará un conocimiento detallado y completo de cómo implementar la interfaz invocable en Java con ejemplos.

Los programas de subprocesos múltiples de Java son testigos del uso Invocable y Futuro. Con el conocimiento previo de subprocesos y subprocesos múltiples, los lectores podrán comprender mejor la discusión en este artículo. Como explicaré Callable Interface en Java en este artículo.

que es un constructor en python

Resumen de hilos

Sin embargo, permítanme darles una breve introducción al concepto de hilos. Un hilo es una ruta de ejecución separada, en caso de que necesite realizar una tarea repetitiva, el trabajo se puede dividir en varias tareas y asignarlas a hilos. Multi-hilono es más que asignar varios subprocesos para ejecutar diferentes tareas en paralelo para obtener el resultado rápidamente.





¿Qué es la interfaz invocable en Java?

Para Java 5, se introdujo la clase 'java.util.concurrent'. Esta interfaz invocable se incorporó a través del paquete de concurrencia que se veía similar a la interfaz Runnable. También puede devolver cualquier objeto y puede lanzar una excepción. Una interfaz Java invocable utiliza Generics, lo que hace posible devolver cualquier tipo de objeto. Executor Framework proporciona un método submit () para ejecutar implementaciones invocables en un grupo de subprocesos. En realidad, Java Executor Framework se adhiere a los patrones WorkerThread.

java-interfaceEn un grupo de subprocesos, los usuarios pueden iniciar subprocesos utilizando el método Executors.newFixedThreadPool (10) y, en consecuencia, enviarle una tarea. Un ejecutable actúa como el objetivo de un hilo y un método void run () público se implementa obligatoriamente para definir la tarea. Esto será ejecutado por subprocesos en el grupo de subprocesos. Según la disponibilidad de los subprocesos en el grupo, Executor Framework asigna trabajo (destino ejecutable) a los subprocesos.Si todos los subprocesos están en uso, la tarea debe detenerse. Una vez que el subproceso completa una tarea, vuelve al grupo como subproceso disponible, que está listo para aceptar tareas futuras. Invocable es similar a Runnable y puede devolver cualquier tipo de objeto cuando queremos obtener un resultado o estado de la tarea.



Retorno de la interfaz invocable

Java Callable devuelve java.util.concurrent. Java Future ofrece un método cancel () para eliminar la tarea invocable asociada. Esta es una versión sobrecargada del método get (), donde se puede especificar un cierto tiempo para esperar el resultado. Es útil evitar un hilo actual, que puede estar bloqueado durante un período más largo. Recuerde que el método get es un método sincrónico y hasta que el invocable finalice su tarea y devuelva un valor, tendrá que esperar un invocable.

También hay métodos 'isDone ()' e 'isCancelled ()' para obtener el estado actual de una tarea invocable asociada. Considere el ejemplo donde se necesita encontrar una suma de todos los números del uno al 100. Podemos hacer un ciclo de 1 a 100 secuencialmente y agregarlos finalmente. Otra posibilidad es dividir y conquistar. En este método, podemos agrupar los números de tal manera que cada grupo tenga exactamente dos elementos. Finalmente, podemos asignar ese grupo a un grupo de subprocesos. Por lo tanto, cada hilo devuelve una suma parcial en paralelo y luego recopila esas sumas parciales y las suma para obtener la suma completa.



Características de la clase invocable y futura

  • La clase invocable es una interfaz de tipo SAM y, por lo tanto, se puede implementar en la expresión lambda.

  • La clase invocable tiene solo un método 'call ()' que contiene todo el código necesario para ejecutarse de forma asincrónica.

  • En un entorno de interfaz ejecutable, no había posibilidad de devolver el resultado del cálculo o lanzar una excepción marcada. Mientras que con Callable está disponible devolver un valor y lanzar una excepción marcada.

    c ++ va ordenado
  • El método Get () de la clase Future se puede usar para recuperar resultados una vez que se realiza el cálculo. Los usuarios también pueden comprobar si el cálculo ha finalizado o no mediante el método done ().

  • Cancelar el cálculo mediante el método future.cancel () también es una ventaja en algunas aplicaciones.

  • Get () se denomina llamada de bloqueo y continúa bloqueándose hasta que se completa el cálculo.

Comparación de clases invocables y ejecutables

Invocable Runnable
Es parte del “ java.util.concurrent” paquete desde Java 1.5Es parte del paquete java.lang desde Java 1.0
Una interfaz parametrizada, como CallableUna interfaz no parametrizada
Capaz de lanzar una excepción marcadaNo puede lanzar una excepción marcada
Contiene un solo método, call (), que devuelve el tipo V, es el mismo que el parámetro de interfaz definido 'Tipo'Aquí, contiene un solo método, llamado run (), que devuelve void

A continuación se muestra un ejemplo simple de una clase invocable de Java implementada donde el código devuelve el nombre del hilo específico, que está ejecutando la tarea después de un segundo. Aquí utilizamos el marco de extracción para ejecutar 100 tareas en paralelo con Java Future hasta el resultado de las tareas enviadas. El primer fragmento es el resultado y el siguiente representa el código.

paquete com.journaldev.threads import java.util.ArrayList import java.util.Date import java.util.List import java.util.concurrent.Callable import java.util.concurrent.ExecutionException import java.util.concurrent.ExecutorService import java .util.concurrent.Executors import java.util.concurrent.Future public class MyCallable implements Callable {@Override public String call () throws Exception {Thread.sleep (1000) // devuelve el nombre del hilo ejecutando esta tarea invocable return Thread.currentThread () .getName ()} public static void main (String args []) {// Obtener ExecutorService de la clase de utilidad Executors, el tamaño del grupo de hilos es 10 ExecutorService ejecutor = Executors.newFixedThreadPool (10) // crear una lista para contener el futuro objeto asociado con la lista invocablelist = new ArrayList() // Crear instancia MyCallable Callable invocable = new MyCallable () para (int i = 0 i<100 i++){ //submit Callable tasks to be executed by thread pool Future future = executor.submit(callable) //add Future to the list, we can get return value using Future list.add(future) } for(Future fut : list){ try { //print the return value of Future, notice the output delay in console // because Future.get() waits for task to get completed System.out.println(new Date()+ '::'+fut.get()) } catch (InterruptedException | ExecutionException e) { e.printStackTrace() } } //shut down the executor service now executor.shutdown() } } 

Cerrar los servicios de ejecutor

El aspecto crucial e importante que muchos desarrolladores pasan por alto es cerrar ExecutorService. ExecutorService es vital y se crea con elementos de hilo adicionales. Tenga en cuenta que la JVM se detiene solo cuando se detienen todos los subprocesos que no son demonios. Por lo tanto, simplemente cerrar el servicio ejecutor evita que la JVM se detenga.

Para decirle al servicio ejecutor que no hay necesidad de ejecutar los subprocesos, debemos cerrar el servicio.

Hay tres formas de invocar el apagado:

  • anular apagado () - Esto inicia un apagado ordenado en el que se ejecutan las tareas enviadas anteriormente, pero no se aceptan nuevas tareas.
  • Lista shutdownNow () - Intenta detener todas las tareas en ejecución activa, detiene el procesamiento de las tareas pendientes y también devuelve una lista de las tareas que estaban pendientes de ejecución.
  • void awaitTermination () - Esto continúa bloqueándose hasta que todas las tareas hayan terminado de ejecutarse después de una solicitud de apagado o hasta que se agote el tiempo de espera. También se bloquea cuando se interrumpe el hilo actual. Todo depende de qué tarea venga primero.

Con esto, llegamos al final del artículo Interfaz invocable en Java. Espero que haya comprendido el futuro y la interfaz invocable en Java.

Revisar la por Edureka, una empresa de aprendizaje en línea de confianza con una red de más de 250.000 alumnos satisfechos repartidos por todo el mundo. El curso de formación y certificación Java J2EE y SOA de Edureka está diseñado para estudiantes y profesionales que desean ser desarrolladores de Java.

tutorial de primavera mvc para principiantes

Tienes una pregunta para nosotros? Menciónelo en la sección de comentarios de este blog de 'Interfaz invocable en Java' y nos comunicaremos con usted lo antes posible.