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ğindeinitialValue()metodu kullanılarak veyaset()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 veyaremove()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.