Sobes.tech
Middle

Šta je ThreadLocal promenljiva?

sobes.tech АИ

Одговор од АИ

ThreadLocal — klasa koja omogućava skladištenje podataka specifičnih za svaki thread. Svaki thread koji koristi ThreadLocal imaće svoju kopiju promenljive, izolovanu od kopija u drugim thread-ovima.

Glavne osobine i primene:

  • Izolacija podataka: Pomaže da se izbegnu problemi sa konkurentnim pristupom zajedničkim promenljivim podacima iz različitih thread-ova, jer svaki thread radi sa svojom kopijom.
  • Upravljanje stanjem po thread-ovima: Korisno za skladištenje informacija vezanih za trenutni zahtev (npr. ID korisnika, kontekst transakcije) u web aplikacijama ili višethreaded servisima, bez potrebe da ih eksplicitno prosleđujete kroz više poziva metoda.
  • Inicijalizacija: ThreadLocal se inicijalizuje pri prvom pristupu iz svakog thread-a putem metode initialValue() ili eksplicitnim postavljanjem vrednosti pomoću set().
  • Životni ciklus: Podaci sačuvani u ThreadLocal dostupni su tokom celog životnog veka thread-a ili dok ih eksplicitno ne uklonite pomoću remove().

Primer upotrebe:

// Kreiramo `ThreadLocal` za skladištenje imena trenutnog thread-a
private static final ThreadLocal<String> threadName = new ThreadLocal<String>() {
    @Override
    protected String initialValue() {
        // Inicijalizacija vrednosti pri prvom pristupu
        return Thread.currentThread().getName();
    }
};

public void processRequest() {
    // Postavljamo vrednost za trenutni thread
    threadName.set("RequestProcessor-" + Thread.currentThread().getId());

    // Dobijamo vrednost za trenutni thread
    String currentThreadName = threadName.get();
    System.out.println("Obrada zahteva u thread-u: " + currentThreadName);

    // Uklanjamo vrednost da bismo izbegli curenje memorije, posebno u poolovima thread-ova
    threadName.remove();
}

Važno je pozvati remove() nakon završetka korišćenja, posebno u poolovima thread-ova, kako bi se izbegli curenja memorije, jer se thread može ponovo koristiti, a stara vrednost ThreadLocal ostaje povezана sa njim.