V programovaní definujeme parametre metódy tak, aby sme odovzdali obsah premenných, ak je úroveň vykonávacej metódy hlboká, každá metóda musí definovať parametre, ktoré majú byť odovzdané; v tomto momente je možné niektoré premenné prejsť cez ThreadLocal, pokiaľ sú všetky metódy vykonávané na rovnakom vlákne, hodnota ThreadLocal sa môže nastaviť a čítať.
Trieda ThreadLocal sa používa na poskytovanie lokálnych premenných vo vnútri vlákna. Keď sú tieto premenné prístupné (get/set) v prostredí s viacvláknovým prostredím, premenné v každom vlákne sú relatívne nezávislé od premenných v iných vláknach.
ThreadLocal najskôr získa aktuálne vlákno (Thread t = Thread.currentThread()) pri vykonávaní metódy set a použije aktuálne vlákno na získanie ThreadLocalMap, ak mapa nie je prázdna, znamená to, že aktuálne vlákno má predtým viazanú mapu, potom aktualizuje hodnotu tejto mapy, ak nie, použije samo seba ako kľúč na vloženie hodnoty do mapy, aby sa realizovalo viazanie premenných a vlákien.
Otestujte kód, nastavte pool vlákien tak, aby udržiaval maximálne 5 vlákien, a keď zavoláme metódu get ThreadLocal v prípade viacvláknového spracovania, dostaneme dáta ThreadLocal (Dátová sada iných vlákien), usMetóda ThreadLocal set sa na aktuálnom vlákne nevolá na nastavenie dát, ako je znázornené na obrázku nižšie:
Chyba spôsobuje:Keď je vlákno opätovne použité, je pravdepodobné, že prvá hodnota získaná z ThreadLocal je hodnota, ktorá zostala z predchádzajúcich vlákien。
Pretože, keď skončíme s ThreadLocal na aktuálnom vlákne,Nezabudnite zavolať na odstránenie kvôli včasnému vyčisteniu。 Ako je uvedené nižšie:
Kód:
(Koniec)
|