I programmering definerer vi metodeparametre til at sende variabelindhold; hvis udførelsesmetodens niveau er dybt, skal hver metode definere parametrene, der skal videresendes, på dette tidspunkt kan nogle variabler sendes gennem ThreadLocal, så længe alle metoder udføres på samme tråd, kan værdien af ThreadLocal sættes og læses.
ThreadLocal-klassen bruges til at levere lokale variabler inde i tråden. Når disse variabler tilgås (henter/sættes) i et multitrådet miljø, er variablerne i hver tråd relativt uafhængige af variablerne i de andre tråde.
ThreadLocal henter først den aktuelle tråd (Thread t = Thread.currentThread()), når set-metoden udføres, og bruger den aktuelle tråd til at hente en ThreadLocalMap; hvis kortet ikke er tomt, betyder det, at den aktuelle tråd har et tidligere bundet kort, og derefter opdateres værdien af dette kort, hvis ikke, bruger det sig selv som nøgle til at sætte værdien i kortet, så man realiserer bindingen mellem variabler og tråde.
Test koden, sæt trådpoolen til at opretholde maksimalt 5 tråde, og når vi kalder ThreadLocal get-metoden i tilfælde af multi-threading, får vi ThreadLocal-dataene (Datasæt fra andre tråde), osThreadLocal-sætmetoden kaldes ikke på den aktuelle tråd for at sætte dataene, som vist i figuren nedenfor:
Fejlårsager:Når en tråd genbruges, er det sandsynligt, at den første værdi, der opnås fra ThreadLocal, er en værdi, der er tilbage fra andre tidligere tråde。
For efter vi er færdige med ThreadLocal i den nuværende tråd,Sørg for at ringe til fjernelse for rettidig rensning。 Som vist nedenfor:
Kodeks:
(Slut)
|