From 0b193f4544439b88f56779911e23aef4e5337065 Mon Sep 17 00:00:00 2001 From: Abhinav Pandey Date: Tue, 4 Jul 2023 20:07:40 +0530 Subject: [PATCH] Bael 6577 (#14260) * BAEL-6577 - Paralellize for loops in Java * BAEL-6577 - Paralellize for loops in Java * BAEL-6577 - Paralellize for loops in Java - adding JMH * BAEL-6577 - Paralellize for loops in Java - using CompletableFuture --- .../concurrent/parallel/Benchmark.java | 14 ++++ .../concurrent/parallel/Processor.java | 73 +++++++++++++++++++ 2 files changed, 87 insertions(+) create mode 100644 core-java-modules/core-java-concurrency-2/src/main/java/com/baeldung/concurrent/parallel/Benchmark.java create mode 100644 core-java-modules/core-java-concurrency-2/src/main/java/com/baeldung/concurrent/parallel/Processor.java diff --git a/core-java-modules/core-java-concurrency-2/src/main/java/com/baeldung/concurrent/parallel/Benchmark.java b/core-java-modules/core-java-concurrency-2/src/main/java/com/baeldung/concurrent/parallel/Benchmark.java new file mode 100644 index 0000000000..964f6b3e3d --- /dev/null +++ b/core-java-modules/core-java-concurrency-2/src/main/java/com/baeldung/concurrent/parallel/Benchmark.java @@ -0,0 +1,14 @@ +package com.baeldung.concurrent.parallel; + +import java.io.IOException; + +class Benchmark { + + public static void main(String[] args) { + try { + org.openjdk.jmh.Main.main(new String[]{"com.baeldung.concurrent.parallel.Processor"}); + } catch (IOException e) { + throw new RuntimeException(e); + } + } +} \ No newline at end of file diff --git a/core-java-modules/core-java-concurrency-2/src/main/java/com/baeldung/concurrent/parallel/Processor.java b/core-java-modules/core-java-concurrency-2/src/main/java/com/baeldung/concurrent/parallel/Processor.java new file mode 100644 index 0000000000..747ae568b0 --- /dev/null +++ b/core-java-modules/core-java-concurrency-2/src/main/java/com/baeldung/concurrent/parallel/Processor.java @@ -0,0 +1,73 @@ +package com.baeldung.concurrent.parallel; + +import org.openjdk.jmh.annotations.Benchmark; +import org.openjdk.jmh.annotations.BenchmarkMode; +import org.openjdk.jmh.annotations.Fork; +import org.openjdk.jmh.annotations.Mode; + +import java.util.ArrayList; +import java.util.List; +import java.util.concurrent.CompletableFuture; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; +import java.util.stream.IntStream; +import java.util.stream.Stream; +import java.util.stream.StreamSupport; + +public class Processor { + + @Benchmark + @BenchmarkMode(Mode.AverageTime) + public void processSerially() throws InterruptedException { + for (int i = 0; i < 100; i++) { + Thread.sleep(10); + } + } + + @Benchmark + @BenchmarkMode(Mode.AverageTime) + public void processParallelyWithExecutorService() throws InterruptedException { + ExecutorService executorService = Executors.newFixedThreadPool(10); + List> futures = new ArrayList<>(); + for (int i = 0; i < 100; i++) { + CompletableFuture future = CompletableFuture.runAsync(() -> { + try { + Thread.sleep(10); + } catch (InterruptedException e) { + e.printStackTrace(); + } + }, executorService); + futures.add(future); + } + CompletableFuture.allOf(futures.toArray(new CompletableFuture[0])).join(); + executorService.shutdown(); + } + + @Benchmark + @BenchmarkMode(Mode.AverageTime) + public void processParallelyWithStream() { + IntStream.range(0, 100) + .parallel() + .forEach(i -> { + try { + Thread.sleep(10); + } catch (InterruptedException e) { + e.printStackTrace(); + } + }); + } + + @Benchmark + @BenchmarkMode(Mode.AverageTime) + public void processParallelyWithStreamSupport() { + Iterable iterable = () -> IntStream.range(0, 100).iterator(); + Stream stream = StreamSupport.stream(iterable.spliterator(), true); + stream.forEach(i -> { + try { + Thread.sleep(10); + } catch (InterruptedException e) { + e.printStackTrace(); + } + }); + } +}