Middle
Mis on ThreadLocal muutuja?
sobes.tech AI
Vastus AI-lt
ThreadLocal — see klass võimaldab salvestada andmeid, mis on spetsiifilised iga niidi jaoks. Kasutades ThreadLocal, iga niit, kes seda kasutab, saab oma koopia muutujast, mis on eraldatud teistest niitidest.
Peamised omadused ja kasutusvaldkonnad:
- Andmete isolatsioon: Aitab vältida konkurentsi tõttu juurdepääsu probleemidele ühiste muudetavate andmete puhul erinevates niitides, kuna iga niit töötab oma koopiaga.
- Oleku haldamine niitide kaupa: Kasulik teabe salvestamiseks, mis on seotud praeguse päringuga (näiteks kasutaja ID, tehingu kontekst) veebirakendustes või mitme niidiga teenustes, ilma selle otsese edastamiseta paljude meetodikutsumiste kaudu.
- Initsialiseerimine:
ThreadLocalinitsialiseerub iga niidi esimese ligipääsu korralinitialValue()meetodi kaudu või selge väärtuse seadistamisegaset()meetodiga. - Elutsükkel:
ThreadLocal-is salvestatud andmed on saadaval kogu niidi eluea jooksul või kuni need on selgelt eemaldatudremove()meetodi abil.
Kasutusnäide:
// Loome `ThreadLocal`-i, et salvestada praeguse niidi nimi
private static final ThreadLocal<String> threadName = new ThreadLocal<String>() {
@Override
protected String initialValue() {
// Initsialiseerime väärtuse esimese ligipääsu korral
return Thread.currentThread().getName();
}
};
public void processRequest() {
// Seadistame väärtuse praegusele niidile
threadName.set("RequestProcessor-" + Thread.currentThread().getId());
// Saame väärtuse praeguselt niidilt
String currentThreadName = threadName.get();
System.out.println("Processing request in thread: " + currentThreadName);
// Eemaldame väärtuse, et vältida mälulekkeid, eriti niidupuhvli kasutamisel
threadName.remove();
}
Oluline on meeles pidada, et pärast kasutamist tuleb kutsuda remove(), eriti niidupuhvli kasutamisel, et vältida mälulekkeid, kuna niit võib olla uuesti kasutusele võetud ja vana ThreadLocal väärtus jääb selle külge.