Questo articolo è un articolo speculare di traduzione automatica, clicca qui per saltare all'articolo originale.

Vista: 27855|Risposta: 1

[Fonte] Java Thread I principi locali e il riutilizzo multithread portano a un disordine dei dati

[Copiato link]
Pubblicato su 01/11/2021 11:45:36 | | | |
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)





Precedente:Docker controlla le impostazioni di riavvio dei container e i container di blocco
Prossimo:Jenkins (5) Presentazione del gruppo di progetto
Pubblicato su 02/11/2021 21:30:12 |
Torna a imparare.
Disconoscimento:
Tutto il software, i materiali di programmazione o gli articoli pubblicati dalla Code Farmer Network sono destinati esclusivamente all'apprendimento e alla ricerca; I contenuti sopra elencati non devono essere utilizzati per scopi commerciali o illegali, altrimenti gli utenti dovranno sostenere tutte le conseguenze. Le informazioni su questo sito provengono da Internet, e le controversie sul copyright non hanno nulla a che fare con questo sito. Devi eliminare completamente i contenuti sopra elencati dal tuo computer entro 24 ore dal download. Se ti piace il programma, ti preghiamo di supportare software autentico, acquistare la registrazione e ottenere servizi autentici migliori. In caso di violazione, vi preghiamo di contattarci via email.

Mail To:help@itsvse.com