From e4611c3de390103cfc9ae4ae0d0bbc99f1e26d2a Mon Sep 17 00:00:00 2001 From: sayiamarora Date: Thu, 23 Oct 2025 21:37:57 +0530 Subject: [PATCH 1/4] Added JEP 356: Enhanced Pseudo-Random Number Generators demo reference in Java17 init file --- src/main/java/org/javademos/init/Java17.java | 3 ++ .../java17/jep356/RandomGenerators17.java | 31 +++++++++++++++++++ src/main/resources/JDK17Info.json | 5 +++ 3 files changed, 39 insertions(+) create mode 100644 src/main/java/org/javademos/java17/jep356/RandomGenerators17.java diff --git a/src/main/java/org/javademos/init/Java17.java b/src/main/java/org/javademos/init/Java17.java index 95247dcd..530ae690 100644 --- a/src/main/java/org/javademos/init/Java17.java +++ b/src/main/java/org/javademos/init/Java17.java @@ -4,6 +4,7 @@ import org.javademos.commons.IDemo; import org.javademos.java17.jep306.RestoreAlwaysStrictFloatingPointSemanticsDemo; +import org.javademos.java17.jep356.RandomGenerators17; import org.javademos.java17.jep382.MacosRenderingPipelineDemo; import org.javademos.java17.jep391.MacOsAarch64PortDemo; import org.javademos.java17.jep403.StronglyEncapsulateInternalsDemo; @@ -34,6 +35,8 @@ public static ArrayList getDemos() { // feel free to comment out demos you are not interested in right now // JEP 306 java17DemoPool.add(new RestoreAlwaysStrictFloatingPointSemanticsDemo()); + // JEP 356 + java17DemoPool.add(new RandomGenerators17()); // JEP 382 java17DemoPool.add(new MacosRenderingPipelineDemo()); // JEP 391 diff --git a/src/main/java/org/javademos/java17/jep356/RandomGenerators17.java b/src/main/java/org/javademos/java17/jep356/RandomGenerators17.java new file mode 100644 index 00000000..9fc5563b --- /dev/null +++ b/src/main/java/org/javademos/java17/jep356/RandomGenerators17.java @@ -0,0 +1,31 @@ +package org.javademos.java17.jep356; + +import org.javademos.commons.IDemo; +import java.util.random.RandomGenerator; +import java.util.random.RandomGeneratorFactory; +import java.util.random.RandomGenerator.JumpableGenerator; + +/** + * # JEP 356: Enhanced Pseudo-Random Number Generators + * Introduced in Java 17 + * + * - Adds new interfaces: RandomGenerator, RandomGeneratorFactory + * - Supports LXM family generators (L32X64Mix, L64X128Mix) + * - Enables stream and jumpable generators for parallel tasks + */ +public class RandomGenerators17 implements IDemo { + + @Override + public void demo() { + info(356); + System.out.println("=== Enhanced Pseudo-Random Number Generators Demo ==="); + + RandomGenerator generator = RandomGenerator.getDefault(); + System.out.println("Default Random Int: " + generator.nextInt()); + System.out.println("Default Random Double: " + generator.nextDouble()); + + JumpableGenerator jumpable = (JumpableGenerator) + RandomGeneratorFactory.of("L64X128MixRandom").create(); + System.out.println("Jumpable Random Int: " + jumpable.nextInt()); + } +} diff --git a/src/main/resources/JDK17Info.json b/src/main/resources/JDK17Info.json index cd948f2c..0abcc5f2 100644 --- a/src/main/resources/JDK17Info.json +++ b/src/main/resources/JDK17Info.json @@ -13,6 +13,11 @@ "dscr": "Make all floating-point operations consistently strict, removing the difference between strictfp and default modes." } }, + { + "number": 356, + "name": "Enhanced Pseudo-Random Number Generators", + "description": "New interfaces and implementations in java.util.random for flexible and stream-based random number generation." +}, { "jep": 382, "info": { From 5fbd9e8f16dcd94342635a6eb1a185bf0db15e05 Mon Sep 17 00:00:00 2001 From: sayiamarora Date: Fri, 24 Oct 2025 00:55:10 +0530 Subject: [PATCH 2/4] updated the changes --- .../java17/jep356/RandomGenerators17.java | 27 +++++++++++-------- 1 file changed, 16 insertions(+), 11 deletions(-) diff --git a/src/main/java/org/javademos/java17/jep356/RandomGenerators17.java b/src/main/java/org/javademos/java17/jep356/RandomGenerators17.java index 9fc5563b..0c576035 100644 --- a/src/main/java/org/javademos/java17/jep356/RandomGenerators17.java +++ b/src/main/java/org/javademos/java17/jep356/RandomGenerators17.java @@ -5,27 +5,32 @@ import java.util.random.RandomGeneratorFactory; import java.util.random.RandomGenerator.JumpableGenerator; -/** - * # JEP 356: Enhanced Pseudo-Random Number Generators - * Introduced in Java 17 - * - * - Adds new interfaces: RandomGenerator, RandomGeneratorFactory - * - Supports LXM family generators (L32X64Mix, L64X128Mix) - * - Enables stream and jumpable generators for parallel tasks - */ +/// Demo for JDK 17 feature JEP 356 - Enhanced Pseudo-Random Number Generators. +/// +/// Introduced new interfaces to improve random number generation: +/// - `RandomGenerator` and `RandomGeneratorFactory` +/// - Support for LXM family generators (`L32X64Mix`, `L64X128Mix`) +/// - Added streamable and jumpable generators for parallel computation. +/// +/// JEP link: +/// - [JEP 356 - Enhanced Pseudo-Random Number Generators](https://openjdk.org/jeps/356) +/// +/// Further reading: +/// - [Baeldung: Enhanced Pseudo-Random Number Generators in Java 17](https://www.baeldung.com/java-17-random-number-generator) +/// +/// @author alois.seckar@gmail.com public class RandomGenerators17 implements IDemo { @Override public void demo() { info(356); - System.out.println("=== Enhanced Pseudo-Random Number Generators Demo ==="); RandomGenerator generator = RandomGenerator.getDefault(); System.out.println("Default Random Int: " + generator.nextInt()); System.out.println("Default Random Double: " + generator.nextDouble()); - JumpableGenerator jumpable = (JumpableGenerator) - RandomGeneratorFactory.of("L64X128MixRandom").create(); + JumpableGenerator jumpable = + (JumpableGenerator) RandomGeneratorFactory.of("L64X128MixRandom").create(); System.out.println("Jumpable Random Int: " + jumpable.nextInt()); } } From a3658dfbca4a9eb4a2efd17ef3e937fb1de83dc1 Mon Sep 17 00:00:00 2001 From: sayiamarora Date: Sat, 25 Oct 2025 11:14:20 +0530 Subject: [PATCH 3/4] Fixed the problem --- .../java/org/javademos/java17/jep356/RandomGenerators17.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/org/javademos/java17/jep356/RandomGenerators17.java b/src/main/java/org/javademos/java17/jep356/RandomGenerators17.java index 0c576035..595de7b7 100644 --- a/src/main/java/org/javademos/java17/jep356/RandomGenerators17.java +++ b/src/main/java/org/javademos/java17/jep356/RandomGenerators17.java @@ -30,7 +30,7 @@ public void demo() { System.out.println("Default Random Double: " + generator.nextDouble()); JumpableGenerator jumpable = - (JumpableGenerator) RandomGeneratorFactory.of("L64X128MixRandom").create(); + (JumpableGenerator) RandomGeneratorFactory.of("L64X256MixRandom").create(); System.out.println("Jumpable Random Int: " + jumpable.nextInt()); } } From 69c4414fa25ae7460e398abe467ab3b776c81212 Mon Sep 17 00:00:00 2001 From: sayiamarora Date: Sun, 26 Oct 2025 11:07:22 +0530 Subject: [PATCH 4/4] used the correct jumpable generator --- .../java/org/javademos/java17/jep356/RandomGenerators17.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/org/javademos/java17/jep356/RandomGenerators17.java b/src/main/java/org/javademos/java17/jep356/RandomGenerators17.java index 595de7b7..2eddf060 100644 --- a/src/main/java/org/javademos/java17/jep356/RandomGenerators17.java +++ b/src/main/java/org/javademos/java17/jep356/RandomGenerators17.java @@ -16,7 +16,7 @@ /// - [JEP 356 - Enhanced Pseudo-Random Number Generators](https://openjdk.org/jeps/356) /// /// Further reading: -/// - [Baeldung: Enhanced Pseudo-Random Number Generators in Java 17](https://www.baeldung.com/java-17-random-number-generator) +/// - [Baeldung: Enhanced Pseudo-Random Number Generators in Java 17](https://www.baeldung.com/java-17-random-number-generators) /// /// @author alois.seckar@gmail.com public class RandomGenerators17 implements IDemo { @@ -30,7 +30,7 @@ public void demo() { System.out.println("Default Random Double: " + generator.nextDouble()); JumpableGenerator jumpable = - (JumpableGenerator) RandomGeneratorFactory.of("L64X256MixRandom").create(); + (JumpableGenerator) RandomGeneratorFactory.of("Xoshiro256PlusPlus").create(); System.out.println("Jumpable Random Int: " + jumpable.nextInt()); } }