Concurrencia en Java 8 Concurrencia en Java 8

Anuncio
75-62 Técnicas de Programación
Concurrentes II
Lic. Ing. Osvaldo Clúa
2014
Facultad de Ingeniería
Universidad de Buenos Aires
Concurrencia
Concurrencia en
en
Java
Java 88
Paralell Streams
Stream<E> parallelStream() Particiona el
streams en varios substreams y los procesa en
filtro2 = (Integer x) -> {
paralelo Predicate<Integer>
System.out.print("Investigando " + x);
System.out.println(" ejecutandose en paralelo "
+ Thread.currentThread().getId());
return x > 5; };
List<Integer> l1 = Arrays.asList(12, 3, 4, 5, 23, 1, 67);
OptionalDouble res2 = l1.parallelStream().
filter(filtro2).mapToInt(x -> x).average();
Investigando 23 ejecutandose en paralelo 1
Investigando 5 ejecutandose en paralelo 1
Investigando 12 ejecutandose en paralelo 12
Investigando 4Investigando 1 ejecutandose en paralelo 13
Investigando 3 ejecutandose en paralelo 1
Investigando 67 ejecutandose en paralelo 10
ejecutandose en paralelo 11
FIUBA 2014
75-08 Sistemas Operativos
Prof. Lic. Ing. Osvaldo Clúa
2
Interface CompletionStage<T>
●
Una etapa de procesamiento(podiblemente
asincrónica) que se activa al finalizar
otra etapa previa.
FIUBA 2014
–
El proceso puede ser una Function,
Consumer o Runnable
–
Los métodos llevan sufijos apply,
accept o run
–
Además hay opción de compose
75-08 Sistemas Operativos
Prof. Lic. Ing. Osvaldo Clúa
3
¿Cuando se ejecuta una etapa?
●
Al finalizar la etapa anterior then
●
Al finalizar una de dos etapas either
●
Al finalizar dos etapas both
FIUBA 2014
–
thenApply
–
runAfterEither
–
thenAccpetBoth
75-08 Sistemas Operativos
Prof. Lic. Ing. Osvaldo Clúa
4
Async
●
Async indica asincronismo (ejecución
paralela)
Supplier trae = ….
CompletableFuture.supplyAsync(trae)
.thenAcceptAsync(new Impri());
public static class Impri implements Consumer<String>{
@Override
public void accept(String t) {
System.out.println("Terminada la task " +
Thread.currentThread().getName()+
" con el valor <<" + t+">>");
}
}
FIUBA 2014
75-08 Sistemas Operativos
Prof. Lic. Ing. Osvaldo Clúa
5
Proyecto
●
●
Tanto con ParallelStream como con
CompletableFuture se pueden
construir cadenas de ejecución (pipes)
Haga Ud un programa donde se vea si esas
cadenas se hacen en threads separados
o si hay un join al terminar cada etapa.
FIUBA 2014
75-08 Sistemas Operativos
Prof. Lic. Ing. Osvaldo Clúa
6
Descargar