From e4611c3de390103cfc9ae4ae0d0bbc99f1e26d2a Mon Sep 17 00:00:00 2001 From: sayiamarora Date: Thu, 23 Oct 2025 21:37:57 +0530 Subject: [PATCH 1/6] 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/6] 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/6] 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/6] 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()); } } From 2dfaf6acddf3c729a999ed58b92a84f7c4d9e71f Mon Sep 17 00:00:00 2001 From: sayiamarora Date: Sun, 26 Oct 2025 11:46:30 +0530 Subject: [PATCH 5/6] =?UTF-8?q?Added=20JEP=20373=20=E2=80=93=20Reimplement?= =?UTF-8?q?=20the=20Legacy=20DatagramSocket=20API=20demo=20for=20Java=2015?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/org/javademos/init/Java15.java | 3 ++ .../java15/jep373/DatagramSocketDemo15.java | 39 +++++++++++++++++++ src/main/resources/JDK15Info.json | 8 ++++ 3 files changed, 50 insertions(+) create mode 100644 src/main/java/org/javademos/java15/jep373/DatagramSocketDemo15.java diff --git a/src/main/java/org/javademos/init/Java15.java b/src/main/java/org/javademos/init/Java15.java index 6869a656..b8ab6ff5 100644 --- a/src/main/java/org/javademos/init/Java15.java +++ b/src/main/java/org/javademos/init/Java15.java @@ -6,6 +6,7 @@ import org.javademos.java15.jep360.SealedClassesDemo; import org.javademos.java15.jep371.HiddenClassesDemo; import org.javademos.java15.jep372.NashornRemovalDemo; +import org.javademos.java15.jep373.DatagramSocketDemo15; import org.javademos.java15.jep375.InstanceofPatternMatchingSecondPreview; import org.javademos.java15.jep381.SolarisSparcRemovalDemo; import org.javademos.java15.jep383.ForeignMemoryAccessDemo; @@ -26,6 +27,8 @@ public static ArrayList getDemos() { java15DemoPool.add(new HiddenClassesDemo()); // JEP 372 java15DemoPool.add(new NashornRemovalDemo()); + // JEP 373 + java15DemoPool.add(new DatagramSocketDemo15()); // JEP 375 java15DemoPool.add(new InstanceofPatternMatchingSecondPreview()); // JEP 381 diff --git a/src/main/java/org/javademos/java15/jep373/DatagramSocketDemo15.java b/src/main/java/org/javademos/java15/jep373/DatagramSocketDemo15.java new file mode 100644 index 00000000..0661f813 --- /dev/null +++ b/src/main/java/org/javademos/java15/jep373/DatagramSocketDemo15.java @@ -0,0 +1,39 @@ +package org.javademos.java15.jep373; + +import org.javademos.commons.IDemo; +import java.net.DatagramPacket; +import java.net.DatagramSocket; +import java.net.InetAddress; + +/// Demo for JDK 15 feature JEP 373 - Reimplement the Legacy DatagramSocket API. +/// +/// This JEP modernized the implementation of the legacy DatagramSocket +/// and DatagramSocketImpl APIs without changing their behavior. +/// The reimplementation uses java.nio infrastructure under the hood, +/// improving maintainability and performance. +/// +/// JEP link: +/// - [JEP 373 - Reimplement the Legacy DatagramSocket API](https://openjdk.org/jeps/373) +/// +/// +/// @author alois.seckar@gmail.com +public class DatagramSocketDemo15 implements IDemo { + + @Override + public void demo() { + info(373); + + try (DatagramSocket socket = new DatagramSocket()) { + String message = "Hello from JEP 373!"; + byte[] buffer = message.getBytes(); + + InetAddress address = InetAddress.getLocalHost(); + DatagramPacket packet = new DatagramPacket(buffer, buffer.length, address, 9999); + socket.send(packet); + + System.out.println("Datagram sent successfully using reimplemented API!"); + } catch (Exception e) { + e.printStackTrace(); + } + } +} diff --git a/src/main/resources/JDK15Info.json b/src/main/resources/JDK15Info.json index 167aeac7..c67a736d 100644 --- a/src/main/resources/JDK15Info.json +++ b/src/main/resources/JDK15Info.json @@ -23,6 +23,14 @@ "link": false, "code": false }, + { + "jep": 373, + "jdk": 15, + "name": "JEP 373 - Reimplement the Legacy DatagramSocket API", + "dscr": "Modern reimplementation of DatagramSocket and DatagramSocketImpl using java.nio for improved maintainability and performance.", + "link": false, + "code": true +}, { "jep": 375, "jdk": 15, From 85df9322d2a43e6c53eddc1caf26c0232adc924e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alois=20Se=C4=8Dk=C3=A1r?= Date: Sun, 26 Oct 2025 16:29:40 +0100 Subject: [PATCH 6/6] docs: update author --- .../java/org/javademos/java15/jep373/DatagramSocketDemo15.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/org/javademos/java15/jep373/DatagramSocketDemo15.java b/src/main/java/org/javademos/java15/jep373/DatagramSocketDemo15.java index 0661f813..e37482a0 100644 --- a/src/main/java/org/javademos/java15/jep373/DatagramSocketDemo15.java +++ b/src/main/java/org/javademos/java15/jep373/DatagramSocketDemo15.java @@ -16,7 +16,7 @@ /// - [JEP 373 - Reimplement the Legacy DatagramSocket API](https://openjdk.org/jeps/373) /// /// -/// @author alois.seckar@gmail.com +/// @author sayiamarora public class DatagramSocketDemo15 implements IDemo { @Override