V programiranju definiramo parametre metode za prenos vsebine spremenljivk; če je raven metode izvajanja globoka, mora vsaka metoda definirati parametre, ki jih je treba prenesti; v tem trenutku je mogoče nekatere spremenljivke prenesti skozi ThreadLocal, dokler so vse metode izvedene na isti niti, je mogoče nastaviti in prebrati vrednost ThreadLocal.
Razred ThreadLocal se uporablja za zagotavljanje lokalnih spremenljivk znotraj niti. Ko se do teh spremenljivk dostopa (get/set) v večnitnem okolju, so spremenljivke v vsaki niti razmeroma neodvisne od spremenljivk v drugih niteh.
ThreadLocal najprej dobi trenutno nit (Thread t = Thread.currentThread()) ob izvajanju metode množice, nato pa uporabi trenutno nit za pridobitev ThreadLocalMap; če mapa ni prazna, to pomeni, da ima trenutna nit že prej vezano preslikavo, nato posodobi vrednost te preslikave, če ne, uporabi sebe kot ključ za vnos vrednosti v preslikavo, da uresniči vezavo spremenljivk in niti.
Testirajte kodo, nastavite nabor niti, da vzdržuje največ 5 niti, in ko pokličemo metodo ThreadLocal get v primeru večnitnosti, dobimo podatke ThreadLocal (Podatkovni nabor drugih niti), usMetoda ThreadLocal set ni klicana v trenutni niti za nastavitev podatkov, kot je prikazano na spodnji sliki:
Napaka povzroča:Ko je nit ponovno uporabljena, je verjetno, da je prva vrednost, pridobljena iz ThreadLocal, vrednost, ki je ostala iz drugih prejšnjih niti。
Ker, ko končamo z ThreadLocal na trenutni niti,Ne pozabite poklicati odstranitve za pravočasno čiščenje。 Kot je prikazano spodaj:
Koda:
(Konec)
|