Sobes.tech
Middle

ThreadLocal dəyişəni nədir?

sobes.tech Süni İntellekt

AI-dan cavab

ThreadLocal — hər bir ip üçün spesifik məlumatları saxlamaq imkanı verən sinifdir. ThreadLocal istifadə edən hər bir ip öz kopiyasına malik olacaq və bu kopiyalar digər ip-lərdən izolyasiya olunacaq.

Əsas xüsusiyyətlər və tətbiqlər:

  • Məlumatların izolyasiyası: Müxtəlif ip-lər arasında paylaşılan və dəyişkən məlumatlara çoxnüvəli giriş problemlərini qarşısını alır, çünki hər ip öz kopiyası ilə işləyir.
  • İp üzrə vəziyyətin idarə olunması: Veb tətbiqlərdə və ya çox ipli xidmətlərdə hazırkı sorğu ilə əlaqəli məlumatları (məsələn, istifadəçi ID-si, tranzaksiya konteksti) saxlamaq üçün faydalıdır və bu məlumatları metodlar arasında açıq şəkildə ötürməyə ehtiyac yoxdur.
  • İlkinləşdirmə: ThreadLocal hər ip üçün ilk girişdə initialValue() metodu vasitəsilə və ya set() ilə açıq şəkildə dəyər təyin edilərək başlanır.
  • Həyat dövrü: ThreadLocal-də saxlanan məlumatlar ip-in həyat dövrü boyunca və ya remove() metodu ilə açıq şəkildə silinənə qədər mövcuddur.

İstifadə nümunəsi:

// Cari ip-in adını saxlamaq üçün ThreadLocal yaradırıq
private static final ThreadLocal<String> threadName = new ThreadLocal<String>() {
    @Override
    protected String initialValue() {
        // İlk girişdə dəyəri başlat
        return Thread.currentThread().getName();
    }
};

public void processRequest() {
    // Cari ip üçün dəyər təyin edirik
    threadName.set("RequestProcessor-" + Thread.currentThread().getId());

    // Cari ip üçün dəyəri alırıq
    String currentThreadName = threadName.get();
    System.out.println("İstək işlənir ip-də: " + currentThreadName);

    // Yaddaş sızmalarını qarşısını almaq üçün dəyəri silirik, xüsusən ip hovuzlarında
    threadName.remove();
}

İstifadədən sonra remove() çağırmaq vacibdir, xüsusən ip hovuzlarında, çünki ip yenidən istifadə oluna bilər və köhnə ThreadLocal dəyəri ona bağlı qala bilər.