Skip to main content

Java’da Rastgele Sayı Üretme Yöntemleri: Güvenli ve Çoklu İş Parçacığı Destekli Random Rehberi 🎲

🚀 Bu Rehberde Ne Öğreneceksiniz?

Bu rehberde Java’da rastgele sayı üretimi için kullanılan farklı yöntemleri öğreneceksiniz.
Random, Math.random(), ThreadLocalRandom ve SecureRandom sınıflarını inceleyerek
farklı senaryolarda güvenli, performanslı ve kontrollü rastgelelik sağlamayı keşfedeceksiniz.


🧠 Teknik Özet

Ana Konu: Java’da rastgele sayı üretimi.
Çözdüğü Problem: Oyun, test, simülasyon veya şifreleme gibi durumlarda rastgele veri üretme ihtiyacı.
Kullanıcı Adımları:

  1. Rastgelelik sınıfını seçmek (Random, ThreadLocalRandom, SecureRandom)
  2. Gerekirse belirli aralık tanımlamak
  3. Farklı veri tiplerinde (int, double, byte vs.) sayı üretmek
  4. Çoklu iş parçacığında güvenli şekilde çalışmak

🎯 Java Rastgele Sayı Üretme Yöntemleri

1️⃣ java.util.Random – Standart Rastgele Üretici

import java.util.Random;
Random rastgele = new Random();
int sayi = rastgele.nextInt();
System.out.println(sayi);

🧠 Bu yöntemle rastgele bir tamsayı (int) üretirsiniz.

🔹 Seed (Tohum) Değeri Kullanımı


Random sabitRastgele = new Random(12345);
int tekrarliSayi = sabitRastgele.nextInt();

🧠 Aynı tohumla çalıştırıldığında aynı sonuçlar üretilir (tekrarlanabilirlik sağlar).


2️⃣ Belirli Aralıkta Rastgele Sayı Üretme


Random rastgele = new Random();
int zar = rastgele.nextInt(6) + 1; // 1-6 arası sayı
System.out.println(zar);

🧠 nextInt(x) 0–(x−1) aralığında sayı üretir, bu yüzden +1 eklenir.

ThreadLocalRandom ile Daha Basit:


int sayi = ThreadLocalRandom.current().nextInt(1, 11);
System.out.println(sayi);

🧠 Çoklu iş parçacığında kullanılabilecek en verimli yöntemdir.


3️⃣ Ondalık (Double/Float) ve Diğer Tipler


Random r = new Random();
double d = r.nextDouble(); // 0.0 – 1.0 arası
float f = r.nextFloat(); // 0.0f – 1.0f arası
long l = r.nextLong(); // Rastgele long değer
boolean b = r.nextBoolean();// true veya false

🧠 Random sınıfı farklı veri tipleri için özel metotlar sunar.

Rastgele Byte Dizisi


byte[] dizi = new byte[5];
r.nextBytes(dizi);
System.out.println(Arrays.toString(dizi));

🧠 Test veya şifreleme işlemlerinde rastgele veri üretmek için kullanılır.


🧵 4️⃣ Çoklu İş Parçacığı (Multithreading) Ortamı: ThreadLocalRandom

ThreadLocalRandom, her iş parçacığı için ayrı bir rastgele üretici oluşturur. Böylece kilitleme (locking) ve çekişme (contention) problemleri ortadan kalkar.


package rabisu.cloud.random;

import java.util.concurrent.ThreadLocalRandom;

public class ThreadLocalRandomOrnek {
public static void main(String[] args) {
Runnable r = () -> {
String isim = Thread.currentThread().getName();
int sayi = ThreadLocalRandom.current().nextInt();
System.out.println(isim + " -> " + sayi);
};

for (int i = 0; i < 3; i++) {
new Thread(r, "IsParcacigi-" + i).start();
}
}
}

📤 Örnek Çıktı:


IsParcacigi-0 -> 2145234
IsParcacigi-1 -> -10324567
IsParcacigi-2 -> 8793245

🧠 ThreadLocalRandom’da seed değeri değiştirilemez (UnsupportedOperationException atar).


🔒 5️⃣ Güvenli Rastgelelik: java.security.SecureRandom

Kriptografik olarak güvenli rastgele sayı üretimi sağlar. API anahtarı, token veya parola oluşturmak için idealdir.


import java.security.SecureRandom;

SecureRandom guvenli = new SecureRandom();
int guvenliSayi = guvenli.nextInt();
System.out.println(guvenliSayi);

🧠 SecureRandom, işletim sisteminin entropi kaynaklarını kullanır ve daha güvenlidir, ancak daha yavaştır.


💬 Sıkça Sorulan Sorular (SSS)

  1. Math.random() ile Random farkı nedir?

Math.random() sadece double döndürür ve Random sınıfını temel alır. Random ise farklı veri tipleri üretebilir.

  1. Random sınıfı thread-safe midir?

Hayır. Çoklu iş parçacığında ThreadLocalRandom tercih edilmelidir.

  1. SecureRandom neden yavaştır?

Sistemin entropi havuzundan veri topladığı için ekstra güvenlik sağlar ancak bu da işlem süresini uzatır.

  1. nextInt(10) ne döndürür?

0 (dahil) ile 9 (hariç) arasında tam sayılar üretir.

  1. Rastgele sayılar gerçekten rastgele mi?

Hayır, bunlar sözde-rastgele (pseudo-random) sayılardır. Aynı seed aynı sonucu verir.


🏁 Sonuç

Java, performans, çoklu iş parçacığı desteği ve güvenlik gereksinimlerine göre farklı rastgelelik araçları sunar:

🧩 Sınıf💡 Kullanım Alanı
RandomBasit rastgele işlemler için kullanılır.
ThreadLocalRandomÇoklu iş parçacığı (multithreaded) ortamlarında performanslı rastgelelik sağlar.
SecureRandomGüvenlik, şifreleme ve token üretimi gibi kritik işlemlerde kullanılır.
💡 İpucu: Performans odaklı projelerde ThreadLocalRandom, güvenlik odaklı sistemlerde SecureRandom tercih edin.

☁️ Tüm bu yöntemleri Rabisu Bulut üzerinde Java uygulamalarınızda test ederek güvenli ve hızlı rastgele veri üretimini deneyimleyebilirsiniz!