/ / ThreadLocal versus Member Variable v vlákne v Java - java, multithreading, súbežnosť, vlákno-lokálne

ThreadLocal versus členské premenná v texte Java - java, multithreading, concurrency, thread-local

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ď č. 1

ak 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é.