Szálprioritások - 1

"Folytassuk a leckét. Mik a szálak prioritásai, és miért van rájuk szükség?

"Valós problémák esetén a különböző szálak által végzett munka fontossága nagyon eltérő lehet. A szálprioritás fogalmát ennek a folyamatnak a vezérlésére hozták létre. Minden szálnak van egy prioritása, amelyet egy 1-től 10-ig terjedő szám képvisel."

"10 a legmagasabb prioritás."

"1 a legalacsonyabb."

"Ha nincs prioritás, akkor egy szál 5-ös prioritást kap (normál)."

A szál prioritása nem befolyásolja jelentősen a szál munkáját, ehelyett inkább ajánlás. Ha több alvó szálnak kell futnia, a Java gép először egy magasabb prioritású szálat indít el.

"A Java gép úgy kezeli a szálakat, ahogy jónak látja. Az alacsony prioritású szálak nem maradnak tétlenül. Egyszerűen kevesebb végrehajtási időt kapnak, mint mások, de továbbra is végrehajtják őket."

"A legtöbb esetben a szálakat mindig ugyanazzal a prioritással hajtják végre. Az a kísérlet, hogy egy szálnak többet adjunk, mint a többit, gyakran a program architekturális problémáira utal."

"Hűha. És már arról álmodoztam, hogy a legmagasabb prioritást rendelem a szálaimhoz, hogy 10-szer annyit tegyenek."

"Kiderült, hogy itt a helyzet közel áll a véglegesítéshez: egy magas prioritású szál többet tud és fog működni, de lehet, hogy nem – erre nincs garancia."

"Mondd, hogyan tudom megváltoztatni egy szál prioritását?"

"Ez nagyon egyszerű. A Thread osztálynak két módszere van:

Módszer Leírás
void setPriority(int newPriority)
Új prioritást állít be
int getPriority()
Az aktuális szál prioritását adja vissza

"A Thread osztálynak három állandója is van:"

nyilvános végső statikus int MIN_PRIORITY = 1;

publikus végső static int NORM_PRIORITÁS = 5;

nyilvános végső statikus int MAX_PRIORITY = 10;

"Hadd találjam ki. MIN_PRIORITY a minimális prioritás, MAX_PRIORITY a maximális, és NORM_PRIORITY az alapértelmezett prioritás?"

"Igen, pontosan. Megírhatod azt a kódot, amely a legmagasabb szálprioritást rendeli hozzá."

"Van itt valami trükk? Valami ilyesmi?"

Thread thread = new MyThread();
thread.setPriority(Thread. MAX_PRIORITY)
thread.start();

– Ez így van. Semmi bonyolult, igaz?

"Igen. Be tudod állítani/módosítani a prioritást egy szál indulása után? Vagy ez olyan, mint a setDaemon, ahol a szál indítása előtt kell beállítani az értéket?"

"A prioritás megváltoztatható a szál elindítása után. Mint már mondtam, ez nem eredményez drámai változásokat."

"Nos, ez egy kicsi, de érdekes téma volt. Köszönöm, Ellie."