Inom programmering definierar vi metodparametrar för att skicka variabelinnehåll, om exekveringsmetodnivån är djup måste varje metod definiera parametrarna som ska skickas, vid denna tidpunkt kan vissa variabler skickas genom ThreadLocal, så länge alla metoder körs på samma tråd kan värdet på ThreadLocal sättas och läsas.
Klassen ThreadLocal används för att tillhandahålla lokala variabler inuti tråden. När dessa variabler nås (get/set) i en multitrådad miljö är variablerna i varje tråd relativt oberoende av variablerna i andra trådar.
ThreadLocal hämtar först den aktuella tråden (Thread t = Thread.currentThread()) när set-metoden körs, och använder den aktuella tråden för att hämta en ThreadLocalMap, om kartan inte är tom betyder det att den aktuella tråden har en tidigare bunden karta, sedan uppdateras värdet på denna karta, annars används den själv som nyckel för att lägga värdet i kartan, för att realisera bindningen av variabler och trådar.
Testa koden, ställ in trådpoolen att upprätthålla maximalt 5 trådar, och när vi anropar ThreadLocal get-metoden i fallet med multitrådning, får vi ThreadLocal-data (Datamängd från andra trådar), ossThreadLocal-setmetoden anropas inte på den aktuella tråden för att sätta datan, som visas i figuren nedan:
Felorsaker:När en tråd återanvänds är det troligt att det första värdet som erhålls från ThreadLocal är ett värde som finns kvar från andra tidigare trådar。
För efter att vi är klara med ThreadLocal i den aktuella tråden,Se till att ringa borttagning för snabb rensning。 Som visas nedan:
Kod:
(Slut)
|