In programmazione, definiamo parametri di metodo per passare il contenuto delle variabili; se il livello del metodo di esecuzione è profondo, ogni metodo deve definire i parametri da passare; a questo punto, alcune variabili possono essere passate attraverso ThreadLocal; finché tutti i metodi vengono eseguiti sullo stesso thread, il valore di ThreadLocal può essere impostato e letto.
La classe ThreadLocal viene utilizzata per fornire variabili locali all'interno del thread. Quando queste variabili vengono accessibili (get/set) in un ambiente multithread, le variabili in ogni thread sono relativamente indipendenti dalle variabili degli altri thread.
ThreadLocal otterrà prima il thread corrente (Thread t = Thread.currentThread()) quando esegue il metodo set, e userà il thread corrente per ottenere un ThreadLocalMap; se la mappa non è vuota, significa che il thread corrente ha una mappa precedentemente legata, poi aggiornerà il valore di questa mappa, altrimenti si userà come chiave per inserire il valore nella mappa, così da realizzare il binding di variabili e thread.
Testiamo il codice, impostate il pool di thread per mantenere un massimo di 5 thread e, quando chiamiamo il metodo get ThreadLocal nel caso del multi-threading, otterremo i dati ThreadLocal (Set di dati da altri thread), noiIl metodo ThreadLocal set non viene chiamato sul thread corrente per impostare i dati, come mostrato nella figura sottostante:
Cause dell'errore:Una volta riutilizzato un thread, è probabile che il primo valore ottenuto da ThreadLocal sia un valore rimasto da altri thread precedenti。
Perché, dopo aver finito con ThreadLocal nel thread corrente,Assicurati di chiamare la rimozione per una pulizia tempestiva。 Come mostrato di seguito:
Codice:
(Fine)
|