Ho un problema che in realtà non penso abbia una soluzione, ma ci proverò comunque. La mia applicazione utilizza un pool di thread e alcuni thread in questo pool dispongono di una variabile locale thread ereditabile. Ho esteso la classe ThreadPoolExecutor per eliminare essenzialmente la variabile locale del thread (nel metodo call back afterExecute) quando viene eseguito un thread.InheritableThreadLocal e pool di thread
Capisco che quando si dispone di una variabile InheritableThreadLocal, viene chiamato il metodo childValue() quando il thread viene inizializzato per ottenere il valore della variabile ThreadLocal dal thread padre. Tuttavia, nel mio caso la prossima volta che si utilizza il thread (dopo essere stato utilizzato una sola volta), il valore della variabile InheritableThreadLocal è null (poiché è stato precedentemente eliminato in afterExecute). Esiste un modo per accedere alla variabile locale del thread del thread principale in beforeExecute in modo da poter essenzialmente simulare cosa fa il metodo childValue in InheritableThreadLocal al momento della creazione del thread.
Perché si sta cancellando filo valore locale del thread figlio se ne avete bisogno in seguito? I valori necessari alla prossima esecuzione provengono da un thread padre diverso o sono stati modificati nel genitore da quando il thread secondario è stato creato per la prima volta? –
@Bert - questo è esattamente il motivo. Fondamentalmente sto memorizzando un ID di richiesta nella variabile locale del thread che cambia attraverso molteplici usi del thread secondario. – neesh