Môžeme získať späť odkaz na členskú premennú vlákna, ako sa nachádzame pre ThreadLocal?
Povedzme napríklad, že používame premennú počítadlana počítanie počtu žiadostí spracovaných vláknom v premennej ThreadLocal. Zvážte, že na opakované použitie vlákien používame program ThreadPool Executer. Teraz každé vlákno uchováva odkaz na premenné počítadla ThreadLocal a môže zvýšiť svoju vlastnú kópiu po každej požiadavke. Podobným spôsobom, ak mám členskú premennú vo vnútri Runnable, môžem získať späť odkaz na ňu? Vlákno sa napriek tomu opätovne používa.
odpovede:
1 pre odpoveď č. 1ak mám v spustiteľnom člene premennú člena, môžem získať odkaz na ňu?
Keď poviete "runnable", hovoríte o nejakom objekte, ktorý implementuje Runnable
rozhranie. Neexistuje nič magického Runnable
a nie je nič kúzla o a run()
metóda.
Členské premenné vášho Runnable
sú rovnako ako členské premenné ktoréhokoľvek iného objektu a váš kód k nim pristupuje rovnakým spôsobom.
P.S., Zvyčajne, keď uvidíte ThreadLocal
v programe to znamená
- Program býval jednovláknový,
- Udržuje veľa svojho stavu v
static
premenné, - Niekto pridal viaczávitové vlákno ako dodatočnú myšlienku a
- Má zmysel, aby sa časť tohto statického stavu duplikovala pre každé vlákno.
Skoro by som ho nikdy nepoužil ThreadLocal
v novom programe, pretože sa usilovne snažím napísať žiadny kód, ktorý závisí od statických premenných a či ich používate ThreadLocal
v prípade nestatických údajov pravdepodobne spôsobíte, že je program zložitejší, ako je potrebné.