Parallelle streams maken
parallel() en parallelStream()
Parallelle streams maken is een gratis Java Academy-les op CoddyKit. Dit is les 1 van 4. Je kunt de volledige les hieronder gratis lezen en daarna in de browser praktisch oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is. Deze les maakt deel uit van het leertraject Java Academy. Je voortgang wordt gesynchroniseerd op het web en in de CoddyKit-app. De cursus Java Academy bevat in totaal 4 lessen.
Wat parallelle streams doen
Een parallelle stream splitst zijn gegevens op en verwerkt delen ervan op meerdere threads, waarna de resultaten worden gecombineerd. Het doel is een hogere verwerkingscapaciteit bij grote werklasten.
import java.util.stream.IntStream;
public class Main {
public static void main(String[] args) {
int sum = IntStream.rangeClosed(1, 1000)
.parallel()
.sum();
System.out.println(sum);
}
}parallel() op een bestaande stream
Door parallel() aan te roepen verander je een sequentiële stream in een parallelle stream. Deze aanroep kan overal in de pijplijn staan.
import java.util.List;
public class Main {
public static void main(String[] args) {
List<Integer> nums = List.of(1, 2, 3, 4, 5);
int total = nums.stream()
.parallel()
.mapToInt(Integer::intValue)
.sum();
System.out.println(total);
}
}parallelStream() op verzamelingen
Collection.parallelStream() maakt rechtstreeks een parallelle stream; het is een verkorte vorm van stream().parallel().
import java.util.List;
public class Main {
public static void main(String[] args) {
List<String> words = List.of("a", "bb", "ccc");
int chars = words.parallelStream()
.mapToInt(String::length)
.sum();
System.out.println(chars);
}
}Terug naar sequentieel
sequential() zet een stream terug naar uitvoering met één thread. De laatste aanroep van parallel() of sequential() geldt voor de hele pijplijn.
import java.util.stream.IntStream;
public class Main {
public static void main(String[] args) {
int sum = IntStream.rangeClosed(1, 100)
.parallel()
.sequential()
.sum();
System.out.println(sum);
}
}isParallel controleren
isParallel() geeft aan of een stream parallel wordt uitgevoerd.
import java.util.stream.IntStream;
public class Main {
public static void main(String[] args) {
System.out.println(IntStream.range(0, 10).isParallel());
System.out.println(IntStream.range(0, 10).parallel().isParallel());
}
}Hetzelfde resultaat, andere uitvoering
Bij associatieve bewerkingen zoals optellen leveren parallelle en sequentiële streams het zelfde resultaat. Alleen de uitvoeringsstrategie verschilt.
import java.util.stream.IntStream;
public class Main {
public static void main(String[] args) {
int seq = IntStream.rangeClosed(1, 50).sum();
int par = IntStream.rangeClosed(1, 50).parallel().sum();
System.out.println(seq == par);
}
}De gedeelde ForkJoinPool
Parallelle streams gebruiken de gedeelde ForkJoinPool.commonPool(). De standaardgrootte is het aantal beschikbare processors min één.
public class Main {
public static void main(String[] args) {
System.out.println(Runtime.getRuntime().availableProcessors());
}
}De volgorde van threads is niet gegarandeerd
Met forEach kunnen parallelle streams in elke volgorde afdrukken, omdat delen op verschillende momenten klaar zijn. Gebruik forEachOrdered als de volgorde belangrijk is.
import java.util.stream.IntStream;
public class Main {
public static void main(String[] args) {
IntStream.rangeClosed(1, 5)
.parallel()
.forEachOrdered(System.out::println);
}
}Reductie combineert deelresultaten
Onder de motorkap berekent een parallelle reductie deelresultaten per deel en voegt die samen met de combinatiebewerking. Voor correcte resultaten moet de bewerking associatief zijn.
import java.util.stream.IntStream;
public class Main {
public static void main(String[] args) {
int product = IntStream.rangeClosed(1, 6)
.parallel()
.reduce(1, (a, b) -> a * b);
System.out.println(product);
}
}Parallel verzamelen
Het verzamelaarframework ondersteunt parallel verzamelen door gedeeltelijke containers samen te voegen. groupingBy werkt correct in parallelle uitvoering.
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
public class Main {
public static void main(String[] args) {
List<String> words = List.of("apple", "banana", "avocado", "cherry");
Map<Character, List<String>> byFirst = words.parallelStream()
.collect(Collectors.groupingBy(w -> w.charAt(0)));
System.out.println(byFirst);
}
}Niet elke stream wordt sneller
Parallelle uitvoering inschakelen is eenvoudig, maar niet altijd voordelig. Kleine gegevensverzamelingen of goedkope bewerkingen kunnen in parallelle uitvoering trager zijn door de extra kosten van splitsen en samenvoegen.
import java.util.stream.IntStream;
public class Main {
public static void main(String[] args) {
long count = IntStream.rangeClosed(1, 10)
.parallel()
.filter(n -> n % 2 == 0)
.count();
System.out.println(count);
}
}Korte controle
Welke threadpool voert parallelle streams standaard uit?
Samenvatting
Je hebt parallelle streams gemaakt:
parallel()zet elke stream om;parallelStream()is een verkorte vorm voor verzamelingen.sequential()zet een stream terug; de laatste aanroep geldt.- Ze worden uitgevoerd in de gedeelde
ForkJoinPool.commonPool(). - Bij associatieve bewerkingen komen de resultaten overeen met sequentiële uitvoering, maar volgorde en snelheid zijn niet gegarandeerd.
Leer Java met een AI-tutor — gratis
Schrijf echte code en voer die uit in je browser, krijg direct hulp van een AI-tutor die 24/7 beschikbaar is en ga verder waar je gebleven bent op het web of in de app.
- Cursussen
- 104
- Lessen
- 374
Veelgestelde vragen
Is de les “Parallelle streams maken” gratis?
Ja — de volledige tekst van “Parallelle streams maken” kun je hier gratis op het web lezen. Als je interactief wilt oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is, en de rest van de cursus Java Academy wilt ontgrendelen, kun je upgraden naar CoddyKit PRO. De cursus Java Academy bevat in totaal 4 lessen.
Wat leer ik in “Parallelle streams maken”?
parallel() en parallelStream() Je oefent met Java Academy door code rechtstreeks in de browser uit te voeren. Een AI-begeleider die 24/7 beschikbaar is beantwoordt je vragen terwijl je de les doorwerkt.
Heb ik ervaring nodig om met Java Academy te beginnen?
Ervaring vooraf is niet nodig. Java Academy op CoddyKit is opgebouwd voor beginners tot gevorderden, zodat je hier of bij het begin kunt starten en in je eigen tempo kunt leren. Dit is les 1 van 4.
Hoe lang duurt de les “Parallelle streams maken”?
De meeste lessen van CoddyKit duren ongeveer 5–10 minuten. Elke les is kort en interactief, zodat je gestaag vooruitgaat en op het web en in de app precies verdergaat waar je was gebleven.
Kan ik code schrijven en uitvoeren in deze les over Java Academy?
Ja. Elke les over Java Academy bevat een ingebouwde code-editor, zodat je rechtstreeks in je browser echte code kunt schrijven en uitvoeren en direct feedback van AI krijgt — lokale installatie is niet nodig.
Alle lessen in deze cursus
- Parallelle streams maken
- Wanneer parallellisme helpt
- Threadveiligheid en bijwerkingen
- Veelvoorkomende valkuilen