Sobes.tech
Middle

ThreadLocal değişkeni nedir?

sobes.tech yapay zeka

AI'dan gelen yanıt

ThreadLocal — her thread başına özgü verileri depolama imkanı sağlayan bir sınıftır. ThreadLocal kullanan her thread, değişkenin kendi kopyasına erişir ve bu kopyalar diğer thread'lerden izole edilmiştir.

Ana özellikler ve kullanım alanları:

  • Veri izolasyonu: Farklı thread'ler arasında paylaşılan ve değiştirilebilir verilere eşzamanlı erişim sorunlarını önlemeye yardımcı olur, çünkü her thread kendi kopyasıyla çalışır.
  • Thread bazlı durum yönetimi: Web uygulamalarında veya çok iş parçacıklı servislerde, mevcut istekle ilgili bilgileri (örneğin, kullanıcı ID'si, işlem bağlamı) tutmak için kullanışlıdır ve bu bilgileri metodlar arasında açıkça iletmeye gerek kalmaz.
  • Başlatma: ThreadLocal, her thread ilk eriştiğinde initialValue() metodu kullanılarak veya set() ile açıkça değer atanarak başlatılır.
  • Yaşam döngüsü: ThreadLocal'de saklanan veriler, thread'in yaşam süresi boyunca veya remove() metodu ile açıkça silinene kadar erişilebilir olur.

Kullanım örneği:

// Mevcut thread'in adını saklamak için ThreadLocal oluşturuyoruz
private static final ThreadLocal<String> threadName = new ThreadLocal<String>() {
    @Override
    protected String initialValue() {
        // İlk erişimde değeri başlat
        return Thread.currentThread().getName();
    }
};

public void processRequest() {
    // Mevcut thread için değer ayarlıyoruz
    threadName.set("RequestProcessor-" + Thread.currentThread().getId());

    // Mevcut thread için değeri alıyoruz
    String currentThreadName = threadName.get();
    System.out.println("İstek işleniyor thread: " + currentThreadName);

    // Bellek sızıntılarını önlemek için değeri kaldırıyoruz, özellikle thread havuzlarında
    threadName.remove();
}

Kullanım sonrası remove() çağrısının yapılması önemlidir, özellikle thread havuzlarında, çünkü thread tekrar kullanılabilir ve eski ThreadLocal değeri ona bağlı kalabilir.