A programozásban a metódusparamétereket definiáljuk a változó tartalom továbbításához; ha a végrehajtási módszer szintje mély, akkor minden módszernek meg kell határoznia az átmenendő paramétereket, ekkor néhány változó átadható a ThreadLocal-on, amennyiben minden metódus ugyanazon a szálon van végrehajtva, a ThreadLocal értéke beállítható, és olvasható.
A ThreadLocal osztályt használják a szálon belüli helyi változók biztosítására. Amikor ezeket a változókat többszálas környezetben érjük el (get/set), az egyes szálak változói viszonylag függetlenek a többi szálban lévő változótól.
A ThreadLocal először megkapja a jelenlegi szálat (Thread t = Thread.currentThread()) a set metódus végrehajtásakor, és a jelenlegi szálat használja a ThreadLocalMap-hez, ha a leképezés nem üres, az azt jelenti, hogy a jelenlegi szálnak van egy korábban kötött leképezése, majd frissíti ennek a leképezésnek az értékét, ha nem, akkor önmagát használja kulcsként, hogy a változók és szálak kötését elérje.
Teszteljük a kódot, állítsuk be a szálpoolt maximum 5 szál fenntartására, és amikor hívjuk a ThreadLocal get metódust többszálos megoldás esetén, megkapjuk a ThreadLocal adatot (Adathalmaz, amelyet más szálak használnak),A ThreadLocal halmaz-metódus nem hívja meg az aktuális szálon az adatok beállításához, ahogy az alábbi ábrán látható:
A hiba okai a következők:Ha egy szálat újra felhasználunk, valószínű, hogy az első ThreadLocal-ból származó érték más korábbi szálakból maradt。
Mert miután befejeztük a ThreadLocal használatát a jelenlegi szálon,Mindenképp hívd fel a Removal-t az időben történő tisztításért。 Ahogy az alábbiakban látható:
Kód:
(Vége)
|