apuntes:concurrencia
Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revisionLast revisionBoth sides next revision | ||
apuntes:concurrencia [2023/05/28 11:15] – [¿Qué son los hilos?] Santiago Faci | apuntes:concurrencia [2023/05/28 11:44] – [Streams paralelos] Santiago Faci | ||
---|---|---|---|
Line 508: | Line 508: | ||
. . . | . . . | ||
</ | </ | ||
+ | |||
+ | ==== CompletableFuture ==== | ||
+ | |||
+ | Proporciona una API más completa que la que hay para la clase //Future//. | ||
+ | |||
+ | * Lanzar una tarea en segundo plano de forma asíncrona y ejecutar un método al finalizar ésta (a través de la llamada a un método callback) | ||
+ | |||
+ | <code java> | ||
+ | CompletableFuture.runAsync(() -> doSomething()) | ||
+ | .whenComplete((string, | ||
+ | </ | ||
+ | |||
+ | * Lanzar una tarea y ejecutar algo cuando ésta termina: | ||
+ | |||
+ | <code java> | ||
+ | private String doSomethingAndReturnResult() { | ||
+ | return " | ||
+ | } | ||
+ | |||
+ | CompletableFuture.supplyAsync(() -> doSomethingAndReturnResult()) | ||
+ | .thenAccept(System.out:: | ||
+ | .whenComplete((nothing, | ||
+ | </ | ||
+ | |||
==== CountDownLatch ==== | ==== CountDownLatch ==== | ||
Line 612: | Line 636: | ||
==== Streams paralelos ==== | ==== Streams paralelos ==== | ||
+ | |||
+ | La ejecución en paralelo significa que se ejecutan fragmentos de código de una aplicación al mismo tiempo. | ||
+ | |||
+ | Hay que tener en cuenta que, en determinadas circunstancias, | ||
+ | |||
+ | En otras circustancias puede interesar puesto que la aplicación aprovecha mucho más los recursos de la máquina al forzar a ésta a ejecutar algunas operaciones de forma simultánea | ||
+ | |||
+ | < | ||
+ | {{ parallel-sequential.png }} | ||
+ | < | ||
+ | |||
+ | En los streams paralelos, se procesan los elementos de forma paralela por segmentos | ||
+ | |||
+ | <code java> | ||
+ | List< | ||
+ | // TODO Poblar la lista de ciudades | ||
+ | cities.parallelStream() | ||
+ | .forEach(System.out:: | ||
+ | </ | ||
+ | |||
+ | Puede mejorar el rendimiento en algunos casos, ya que permite que la aplicación realice algunos cálculos (matemáticos en este caso) de forma paralela, aprovechando mucho más los recursos de la máquina | ||
+ | |||
+ | <code java> | ||
+ | long count = Stream.iterate(0, | ||
+ | .limit(500000) | ||
+ | .parallel() | ||
+ | .filter(Main:: | ||
+ | .count(); | ||
+ | System.out.println(" | ||
+ | </ | ||
==== Locks ==== | ==== Locks ==== |
apuntes/concurrencia.txt · Last modified: 2023/05/28 23:59 by Santiago Faci