În programare, definim parametrii metodei pentru a transmite conținutul variabilelor; dacă nivelul metodei de execuție este profund, atunci fiecare metodă trebuie să definească parametrii ce trebuie transmise; în acest moment, unele variabile pot fi trecute prin ThreadLocal, atâta timp cât toate metodele sunt executate pe același fir, valoarea ThreadLocal poate fi setată și citită.
Clasa ThreadLocal este folosită pentru a furniza variabile locale în interiorul firului. Când aceste variabile sunt accesate (get/set) într-un mediu multi-threaded, variabilele din fiecare fir sunt relativ independente de variabilele din celelalte fire.
ThreadLocal va obține mai întâi firul curent (Thread t = Thread.threadCurrentThread()) când execută metoda set și va folosi firul curent pentru a obține un ThreadLocalMap; dacă harta nu este goală, înseamnă că firul curent are o hartă legată anterior, apoi actualizează valoarea acestei hărți, dacă nu, se folosește ca cheie pentru a pune valoarea în hartă, astfel încât să se realizeze legarea variabilelor și firelor.
Testăm codul, setăm pool-ul de fire să mențină un maxim de 5 fire de execuție, iar când apelăm metoda get ThreadLocal în cazul multi-threading-ului, vom obține datele ThreadLocal (Set de date realizat de alte fire de execuție), noiMetoda setului ThreadLocal nu este apelată pe firul curent pentru a seta datele, așa cum se arată în figura de mai jos:
Cauzele erorii:Odată ce un fir este reutilizat, este probabil ca prima valoare obținută din ThreadLocal să fie o valoare rămasă din alte fire anterioare。
Pentru că, după ce terminăm cu ThreadLocal pe firul curent,Asigură-te că suni la îndepărtare pentru curățare la timp。 Așa cum se arată mai jos:
Cod:
(Sfârșit)
|