Sobes.tech
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: ThreadLocal initsialiseerub iga niidi esimese ligipääsu korral initialValue() meetodi kaudu või selge väärtuse seadistamisega set() meetodiga.
  • Elutsükkel: ThreadLocal-is salvestatud andmed on saadaval kogu niidi eluea jooksul või kuni need on selgelt eemaldatud remove() 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.