Security Fortgeschritten

Das RandomGenerator-Interface verwenden, um Zufallszahlenalgorithmen per Name auszuwählen, ohne an eine bestimmte Klasse gebunden zu sein.

✕ Java 8
// Hard-coded to one algorithm
Random rng = new Random();
int value = rng.nextInt(100);

// Or thread-local, but still locked in
int value = ThreadLocalRandom.current()
    .nextInt(100);
✓ Java 17+
// Algorithm-agnostic via factory
var rng = RandomGenerator.of("L64X128MixRandom");
int value = rng.nextInt(100);

// Or get a splittable generator
var rng = RandomGeneratorFactory
    .of("L64X128MixRandom").create();
Problem mit diesem Code entdeckt? Sag uns Bescheid.
🔧

Algorithmus-agnostisch

Den besten RNG-Algorithmus per Name wählen, ohne die Codestruktur zu ändern.

Bessere Algorithmen

Zugang zu modernen LXM-Generatoren mit überlegenen statistischen Eigenschaften.

🔗

Einheitliche API

Eine Schnittstelle für Random, ThreadLocalRandom, SplittableRandom und mehr.

Alter Ansatz
new Random() / ThreadLocalRandom
Moderner Ansatz
RandomGenerator-Factory
Seit JDK
17
Schwierigkeitsgrad
Fortgeschritten
RandomGenerator-Interface
Verfügbar

Verfügbar seit JDK 17 (September 2021, JEP 356).

JDK 17 führte RandomGenerator als gemeinsames Interface für alle RNG-Implementierungen ein. Statt new Random() oder ThreadLocalRandom fest zu kodieren, können Algorithmen per Name über eine Factory ausgewählt werden, was den Wechsel zwischen für unterschiedliche Anwendungsfälle optimierten Algorithmen erleichtert (Geschwindigkeit, statistische Qualität, Teilbarkeit).

Teilen 𝕏 🦋 in