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:
ThreadLocalse inicijalizuje pri prvom pristupu iz svakog thread-a putem metodeinitialValue()ili eksplicitnim postavljanjem vrednosti pomoćuset(). - Životni ciklus: Podaci sačuvani u
ThreadLocaldostupni su tokom celog životnog veka thread-a ili dok ih eksplicitno ne uklonite pomoćuremove().
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.