Skip to content

Commit cdfe141

Browse files
committed
feat(parallel-streams: início de streams paralelos
Criação da seção, tópicos e referências sobre Streams paralelos. Ref. Issue #24
1 parent f91d85a commit cdfe141

File tree

2 files changed

+47
-1
lines changed

2 files changed

+47
-1
lines changed
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
:java-package: src/org/j6toj8/streams
2+
:section-java-package: ../../../{java-package}
3+
4+
=== Streams Paralelos
5+
6+
.Objetivo
7+
--------------------------------------------------
8+
Develop code that uses parallel streams, including decomposition operation and reduction operation in streams
9+
-
10+
Desenvolver código que usa Streams Paralelos, incluindo operação de decomposição e operação de redução em Streams
11+
--------------------------------------------------
12+
13+
Streams podem ser sequenciais ou paralelos. Os sequencias foram vistos na seção anterior, enquanto os paralelos serão apresentados nesta seção. Streams paralelos são executados por mais de uma Thread, geralmente uma quantidade igual à quantidade de núcleos do processador onde a aplicação está sendo executada. Apesar disso, nem sempre é útil utilizá-los. Seu ganho real é em Streams com grande volumes de dados. Em um Stream pequeno, transformá-lo em paralelo pode até causar uma perda de performance.
14+
15+
Ao utilizar qualquer tipo de Stream, é recomendável não executar funções lambdas que causem efeitos colaterais, como mudanças no estado de objetos. Em Streams paralelos essa recomendação é ainda mais forte.
16+
17+
. Chamando .parallel em Streams
18+
. Chamando .parallelStream em Coleções
19+
. Exemplo de .forEach com e sem paralelo, imprimindo em diferentes
20+
. Exemplo de .forEachOrdered em streams paralelos, que mantém ordem
21+
. Exemplo de ganho de performance
22+
. Evitar expressões lambda que alteram o estado de um objeto. Exemplo de forEachOrdered e um map com operação stateful.
23+
. Exemplo de findAny com resultados imprevisíveis
24+
. Utilização de unordered para ganhar performance em findFirst, limit, skip
25+
. Reduce com acumuladores associativos (multiplicação)
26+
. Reduce com acumuladores não-associativos (subtração)
27+
. Exemplo com toConcurrentMap
28+
. Exemplo com groupByConcurrent
29+
30+
.Referências
31+
****
32+
33+
* Working with Parallel Streams
34+
+
35+
Boyarsky, Jeanne; Selikoff, Scott. OCP: Oracle Certified Professional Java SE 8 Programmer II Study Guide (p. 366). Wiley. Edição do Kindle.
36+
37+
* https://www.baeldung.com/java-8-streams[The Java 8 Stream API Tutorial.]
38+
39+
* https://docs.oracle.com/javase/tutorial/collections/streams/parallelism.html[Parallelism.] The Java™ Tutorials.
40+
41+
* https://docs.oracle.com/javase/8/docs/api/java/util/stream/package-summary.html[Package java.util.stream.] Java Plataform SE 8.
42+
43+
* https://docs.oracle.com/javase/8/docs/api/?java/util/stream/Stream.html[Interface Stream<T>.] Java Plataform SE 8.
44+
45+
****

ch05-java-streams.asc

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
[[ch05-java-streams]]
22
== Java Streams
33

4-
include::book/05-java-streams/sections/01-using-streams.asc[]
4+
include::book/05-java-streams/sections/01-using-streams.asc[]
5+
include::book/05-java-streams/sections/02-parallel-streams.asc[]

0 commit comments

Comments
 (0)