V programování definujeme parametry metody pro předávání obsahu proměnných, pokud je úroveň metody vykonání hluboká, každá metoda musí definovat parametry, které mají být předány. V tomto okamžiku lze některé proměnné předávat přes ThreadLocal, pokud jsou všechny metody vykonávány ve stejném vlákně, lze nastavit a přečíst hodnotu ThreadLocal.
Třída ThreadLocal slouží k poskytování lokálních proměnných uvnitř vlákna. Když jsou tyto proměnné přístupné (get/set) v prostředí s více vlákny, proměnné v každém vlákně jsou relativně nezávislé na proměnných v ostatních vláknech.
ThreadLocal nejprve získá aktuální vlákno (Thread t = Thread.currentThread()) při spuštění metody set a použije aktuální vlákno k získání ThreadLocalMap, pokud mapa není prázdná, znamená to, že aktuální vlákno má dříve vázanou mapu, poté aktualizuje hodnotu této mapy, pokud ne, použije samo sebe jako klíč k vložení hodnoty do mapy, aby bylo možné realizovat vázání proměnných a vláken.
Otestujte kód, nastavte pool vláken tak, aby udržoval maximálně 5 vláken, a když zavoláme metodu get ThreadLocal v případě vícevláknového zpracování, dostaneme data ThreadLocal (Data setová jinými vlákny), usMetoda ThreadLocal set není volána v aktuálním vlákně k nastavení dat, jak je znázorněno na obrázku níže:
Chyba způsobuje:Jakmile je vlákno znovu použito, je pravděpodobné, že první hodnota získaná z ThreadLocal je hodnota, která zůstala z předchozích vláken。
Protože po dokončení s ThreadLocal v aktuálním vlákně,Nezapomeňte zavolat odstranění kvůli včasnému vyčištění。 Jak je uvedeno níže:
Kód:
(Konec)
|