Prioritățile firelor - 1

„Să continuăm lecția. Care sunt prioritățile firelor și de ce sunt necesare?

"În problemele din lumea reală, importanța muncii efectuate de diferite fire poate varia foarte mult. Conceptul de prioritate a firului a fost creat pentru a controla acest proces. Fiecare fir are o prioritate reprezentată de un număr de la 1 la 10."

„10 este cea mai mare prioritate”.

„1 este cel mai mic”.

„Dacă nu se acordă nicio prioritate, atunci un fir primește prioritate 5 (normală).”

Prioritatea unui fir nu îi afectează în mod semnificativ activitatea, ci este mai degrabă o recomandare. Dacă există mai multe fire de execuție care trebuie să ruleze, mașina Java va începe mai întâi un fir cu o prioritate mai mare.

„Mașina Java gestionează firele de execuție așa cum crede de cuviință. Firele cu prioritate scăzută nu vor fi lăsate inactiv. Pur și simplu vor primi mai puțin timp de execuție decât altele, dar vor fi în continuare executate.”

„În majoritatea cazurilor, firele de execuție sunt întotdeauna executate cu aceeași prioritate. O încercare de a da unui fir mai mult decât altele este adesea un indiciu al problemelor arhitecturale dintr-un program.”

"Uau. Și deja visasem să acord cea mai mare prioritate firelor mele, astfel încât să facă de 10 ori mai mult."

„Se pare că situația de aici este aproape de finalizare: un fir cu o prioritate ridicată poate și va funcționa mai mult, dar poate nu — nu există nicio garanție”.

„Spune, cum schimb prioritatea unui fir?”

„Este foarte ușor. Clasa Thread are două metode:”

Metodă Descriere
void setPriority(int newPriority)
Stabilește o nouă prioritate
int getPriority()
Returnează prioritatea curentă a firului

„Clasa Thread are și trei constante:”

public final static int MIN_PRIORITY = 1;

public final static int NORM_PRIORITY = 5;

public final static int MAX_PRIORITY = 10;

"Lăsați-mă să ghicesc. MIN_PRIORITY este prioritatea minimă, MAX_PRIORITY este cea maximă și NORM_PRIORITY este prioritatea implicită?"

"Da, exact. Puteți scrie codul care atribuie cea mai mare prioritate a firului."

"Este vreun truc aici? Ceva de genul acesta?"

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

"Așa e corect. Nimic complicat, nu?"

"Da. Puteți seta/modifica prioritatea după ce începe un fir de execuție? Sau este ca setDaemon, unde trebuie să setați valoarea înainte de a începe firul?"

„Prioritatea poate fi schimbată după ce este început un fir. După cum am spus deja, acest lucru nu are ca rezultat schimbări dramatice.”

— Ei bine, acesta a fost un subiect mic, dar interesant. Mulțumesc, Ellie.