Mam problem, który nie wydaje mi się, że ma rozwiązanie, ale i tak spróbuję tutaj. Moja aplikacja używa puli wątków, a niektóre wątki w tej puli mają dziedziczną zmienną lokalną wątku. Rozszerzyłem klasę ThreadPoolExecutor, aby zasadniczo usunąć zmienną lokalną wątku (w metodzie afterExecute) po zakończeniu wykonywania wątku.InheritableThreadLocal i puli wątków
Rozumiem, że gdy masz zmienną InheritableThreadLocal, metoda childValue() jest wywoływana, gdy wątek jest inicjowany, aby uzyskać wartość zmiennej ThreadLocal z wątku rodzica. Jednak w moim przypadku przy następnym użyciu wątku (po jego użyciu raz) wartość zmiennej InheritableThreadLocal ma wartość NULL (ponieważ została wcześniej wyczyszczona w AfterExecute). Czy istnieje sposób dostępu do zmiennej lokalnej wątku wątku macierzystego przedExecute, aby w zasadzie móc symulować, co robi metoda childValue w InheritableThreadLocal w momencie tworzenia wątku.
Czemu wyczyszczenie wątek wartość lokalnego wątku podrzędnego jeśli trzeba go później? Czy wartości wymagane w następnym uruchomieniu z innego wątku nadrzędnego, czy też zostały zmienione w obiekcie nadrzędnym, ponieważ wątek potomny został najpierw utworzony? –
@ Bert - to jest właśnie powód. Zasadniczo przechowuję identyfikator żądania w zmiennej lokalnej wątku, która zmienia się w wielu zastosowaniach wątku podrzędnego. – neesh