In programmeren definiëren we methodeparameters om variabele inhoud door te geven; als het uitvoeringsmethodeniveau diep is, moet elke methode de parameters definiëren die doorgegeven moeten worden; op dit moment kunnen sommige variabelen door ThreadLocal worden gestuurd, zolang alle methoden op dezelfde thread worden uitgevoerd, kan de waarde van ThreadLocal worden ingesteld en gelezen.
De ThreadLocal-klasse wordt gebruikt om lokale variabelen binnen de thread te leveren. Wanneer deze variabelen worden benaderd (get/set) in een multithreaded omgeving, zijn de variabelen in elke thread relatief onafhankelijk van de variabelen in andere threads.
ThreadLocal haalt eerst de huidige thread op (Thread t = Thread.currentThread()) bij het uitvoeren van de set-methode, en gebruikt de huidige thread om een ThreadLocalMap te krijgen; als de map niet leeg is, betekent dit dat de huidige thread een eerder gebonden map heeft, waarna de waarde van deze map wordt bijgewerkt, zo niet, gebruikt zichzelf als sleutel om de waarde in de map te plaatsen, zodat de binding van variabelen en threads wordt gerealiseerd.
Test de code, stel de threadpool in op maximaal 5 threads, en wanneer we de ThreadLocal get-methode aanroepen in het geval van multithreading, krijgen we de ThreadLocal-data (Dataset van andere threads), onsDe ThreadLocal set-methode wordt niet aangeroepen op de huidige thread om de data in te stellen, zoals getoond in de onderstaande figuur:
Foutoorzaken:Zodra een thread wordt hergebruikt, is het waarschijnlijk dat de eerste waarde die uit ThreadLocal wordt verkregen, een overgebleven waarde is van andere eerdere threads。
Want, nadat we klaar zijn met ThreadLocal in de huidige thread,Zorg ervoor dat je Remove belt voor tijdige zuivering。 Zoals hieronder getoond:
Code:
(Einde)
|