Llamar asincrónicamente a un método en Java
-
Use
Thread
para llamar asincrónicamente a un método en Java -
Use
FutureTask
para llamar asincrónicamente a un método en Java -
Use
CompletableFuture
para llamar asincrónicamente a un método en Java -
Use
EA Async
para llamar asíncronamente a un método en Java - Use la biblioteca Cactoos para llamar asincrónicamente a un método en Java
En este artículo, aprenderemos cómo llamar a una función en Java de forma asíncrona.
Para comenzar, veremos algunas de las herramientas de programación asíncrona integradas de Java, como FutureTask y CompletableFuture. Luego veremos algunas bibliotecas que ofrecen soluciones listas para usar, como EA Async y Cactoos.
Use Thread
para llamar asincrónicamente a un método en Java
Podemos comenzar un nuevo hilo para realizar cualquier acción asíncrona. Es más sencillo de entender.
Hagamos un hilo nuevo que sume dos enteros e imprima el resultado:
class example {
public static void main(String[] args) {
int num1 = 4;
int num2 = 5;
int result = num1 + num2;
Thread T = new Thread(
() -> { System.out.println("Addition of " + num1 + " and " + num2 + " is " + result); });
T.start();
}
}
Use FutureTask
para llamar asincrónicamente a un método en Java
La interfaz Future le permite realizar acciones asincrónicas utilizando FutureTask
. Podemos usar el método de envío de ExecutorService
para ejecutar el proyecto de forma asíncrona y devolver un objeto FutureTask
.
Por ejemplo, aquí está cómo encontrar el factorial de un número:
int num1 = 9;
ExecutorService tp = Executors.newCachedThreadPool();
Future<double> futureTask = tp.submit(() -> factorial(num1));
while (!futureTask.isDone()) {
System.out.println("Still processing the task");
}
double result = futureTask.get();
tp.shutdown();
Hemos utilizado la función isDone
de la interfaz Future para ver si el trabajo se ha terminado. Después de eso, usamos el método get
para adquirir el resultado.
Use CompletableFuture
para llamar asincrónicamente a un método en Java
Como un híbrido de Future
y CompletionStage
, CompletableFuture
se introdujo en Java 8. Tiene técnicas de programación asincrónica como supplyAsync
, runAsync
y thenApplyAsync
.
Un CompletionStage
es una promesa. Garantiza que el cálculo se completará en algún momento.
El CompletionStage
es útil porque proporciona varios métodos para adjuntar devoluciones de llamada que se ejecutarán cuando se complete la etapa.
Comencemos desde el principio y hagamos un cálculo asíncrono simple.
Use supplyAsync
con CompletableFuture
para llamar asíncronamente a un método en Java
CompletableFuture.supplyAsync(this::sendMsg);
Tan simple como eso, la función supplyAsync
acepta un proveedor que contiene el código asíncrono. Deseamos utilizar la función sendMsg
en este ejemplo.
Use thenAccept
con CompletableFuture
para llamar asincrónicamente a un método en Java
CompletableFuture.supplyAsync(this::sendMsg).thenAccept(this::notify);
En el primer ejemplo, ejecutamos sendMsg
para enviar un mensaje de forma asíncrona. Así que agreguemos una devolución de llamada que nos avise del estado de entrega del mensaje.
Una devolución de llamada se puede introducir de varias maneras; una forma es usar thenAccept
. Requiere que se notifique a un usuario, en este ejemplo, para manejar el resultado del cálculo anterior una vez realizado.
Use EA Async
para llamar asíncronamente a un método en Java
Aquí hay otra característica de Java que le permite escribir código asincrónico paso a paso, lo que facilita mucho la programación y el escalado. Electronic Arts es el creador de la funcionalidad async-await, que está disponible para el entorno Java a través del paquete ea-async.
Esta característica transforma el código de tiempo de ejecución y reescribe la llamada al método await, comparable a completableFuture
.
Entonces podemos usar el método EA-sync
conocido como el método await para implementar el código anterior completableFuture
llamando a la función Async.init
para inicializar el tiempo de ejecución Async
.
Aquí, usaremos la función de espera que ofrece la clase Async
de EA para modificar el código CompletableFuture
descrito anteriormente:
static {
Async.init();
}
Para configurar el análisis de tiempo de ejecución Async
, usamos la función Async.init
como estática.
public double example2(int num1) {
CompletableFuture<double> cf = CompletableFuture.supplyAsync(() -> factorial(num1));
double result = Async.await(cf);
}
En tiempo de ejecución, la función async
cambia el código y reescribe la llamada al método await
para operar de manera similar, utilizando una cadena de CompletableFuture
.
Use la biblioteca Cactoos para llamar asincrónicamente a un método en Java
Para tareas asincrónicas, esta biblioteca ofrece una clase Async
. La biblioteca Cactoos tiene un amplio repertorio, que va desde la manipulación de texto hasta estructuras de datos.
Los tipos y funciones primitivos de esta biblioteca son comparables a los proporcionados por otras bibliotecas como Guava y Apache Commons, aunque están más enfocados en conceptos de diseño orientado a objetos.
Aquí, usando una instancia de la clase Async
de Cactoos, encontraremos el factorial de un número.
Async<Integer, Double> a = new Async<Integer, Double>(inputdata -> factorial(inputdata));
Future<Double> asyncFuture = a.apply(num1);
Double result = asyncFuture.get();
La función apply
utiliza el método ExecutorService.submit
para actuar y devolver un objeto de interfaz Future. La biblioteca Cactoos ofrece clases que realizan las mismas funciones que los métodos estáticos que se encuentran en la biblioteca Apache Commons.
I have been working as a Flutter app developer for a year now. Firebase and SQLite have been crucial in the development of my android apps. I have experience with C#, Windows Form Based C#, C, Java, PHP on WampServer, and HTML/CSS on MYSQL, and I have authored articles on their theory and issue solving. I'm a senior in an undergraduate program for a bachelor's degree in Information Technology.
LinkedIn