In der Programmierung definieren wir Methodenparameter, um Variableninhalte zu übergeben. Wenn die Ausführungsmethode tief ist, muss jede Methode die zu übergebenden Parameter definieren. Zu diesem Zeitpunkt können einige Variablen durch ThreadLocal weitergeleitet werden, solange alle Methoden im selben Thread ausgeführt werden, kann der Wert von ThreadLocal gesetzt und gelesen werden.
Die ThreadLocal-Klasse wird verwendet, um lokale Variablen innerhalb des Threads bereitzustellen. Wenn diese Variablen in einer Multi-Thread-Umgebung abgerufen (get/set) werden, sind die Variablen in jedem Thread relativ unabhängig von den Variablen in anderen Threads.
ThreadLocal erhält zunächst den aktuellen Thread (Thread t = Thread.currentThread()) beim Ausführen der Set-Methode und verwendet den aktuellen Thread, um einen ThreadLocalMap zu erhalten; wenn die Abbildung nicht leer ist, bedeutet das, dass der aktuelle Thread eine zuvor gebundene Abbildung hat, aktualisiert dann den Wert dieser Map, andernfalls verwendet er sich selbst als Schlüssel, um den Wert in die Map einzufügen, um die Bindung von Variablen und Threads zu realisieren.
Teste den Code, setze den Threadpool auf maximal 5 Threads, und wenn wir im Fall von Multithreading die ThreadLocal-Get-Methode aufrufen, erhalten wir die ThreadLocal-Daten (Datensatz anderer Threads), usDie ThreadLocal-Set-Methode wird auf dem aktuellen Thread nicht aufgerufen, um die Daten festzulegen., wie in der untenstehenden Abbildung dargestellt:
Fehlerursachen:Sobald ein Thread wiederverwendet wird, ist es wahrscheinlich, dass der erste aus ThreadLocal erhaltene Wert ein Wert, der von anderen früheren Threads übrig geblieben ist。
Denn nachdem wir mit ThreadLocal im aktuellen Thread fertig sind,Rufen Sie unbedingt die Entfernung an, um rechtzeitig zu reinigen。 Wie unten gezeigt:
Code:
(Ende)
|