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ı:
- Rastgelelik sınıfını seçmek (
Random,ThreadLocalRandom,SecureRandom) - Gerekirse belirli aralık tanımlamak
- Farklı veri tiplerinde (int, double, byte vs.) sayı üretmek
- Ç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)
- 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.
- Random sınıfı thread-safe midir?
Hayır. Çoklu iş parçacığında ThreadLocalRandom tercih edilmelidir.
- 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.
- nextInt(10) ne döndürür?
0 (dahil) ile 9 (hariç) arasında tam sayılar üretir.
- 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ı |
|---|---|
| Random | Basit rastgele işlemler için kullanılır. |
| ThreadLocalRandom | Çoklu iş parçacığı (multithreaded) ortamlarında performanslı rastgelelik sağlar. |
| SecureRandom | Gü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!