"Bună, Amigo! Iată o întrebare interesantă pe care fie ai avut-o deja, fie o vei avea în curând. Cum poți opri un fir de discuție? "
Să presupunem că utilizatorul spune programului să „descarce un fișier de pe Internet”. Firul principal creează un fir de execuție separat pentru acest job și îi transmite un obiect a cărui metodă de rulare conține toate acțiunile necesare pentru a descărca fișierul.
Dar dintr-o dată utilizatorul se răzgândește. Nu vrea să descarce fișierul. Cum anulăm un job și oprim firul?
— Da, spune-mi cum?
„ Nu putem. Acesta este cel mai obișnuit și cel mai corect răspuns. Nu poți opri un fir. Numai el se poate opri singur. ”
Dar puteți trimite un semnal unui fir, spunându-i într-un fel că lucrarea nu mai trebuie efectuată și că ar trebui să se încheie. Așa cum firul principal se termină prin întoarcerea de la metoda principală, un fir de execuție secundar se termină prin întoarcerea de la metoda run.
„Care este cel mai bun mod de a face asta?”
„Puteți adăuga o variabilă, cum ar fi un boolean . Dacă este adevărat , firul rulează. Dacă este fals , firul ar trebui să se termine. Astfel, de exemplu:”
Cod | Descriere |
---|---|
|
Clasa Clock scrie „Tick” pe consolă o dată pe secundă pentru totdeauna Dacă ClockManager.isClockRun este fals, metoda de rulare se termină. |
|
Firul principal pornește un fir copil (ceasul) care ar trebui să ruleze pentru totdeauna
Așteptați 10 secunde și dați ceasului un semnal de sfârșit. Firul principal își finalizează munca. Firul ceasului își încheie activitatea. |
„Dacă avem mai multe fire, atunci ce?”
„Cel mai bine este să aveți o astfel de variabilă pentru fiecare fir. Cel mai convenabil este să o adăugați direct la clasă. Puteți adăuga o variabilă booleană isRun acolo. Cu toate acestea, este mai bine să adăugați o variabilă booleană isCancel care devine adevărată dacă sarcina este anulat."
Cod | Descriere |
---|---|
|
Clasa Clock scrie cuvântul «Tick» pe consolă o dată pe secundă, atâta timp cât isCancel este fals.
Când isCancel devine adevărat, metoda run se termină. |
|
Firul principal pornește un fir copil (ceasul) care ar trebui să ruleze pentru totdeauna
Așteptați 10 secunde și anulați sarcina apelând metoda de anulare. Firul principal își finalizează munca. Firul ceasului își încheie activitatea. |
— Voi ține cont de asta. Mulțumesc, Ellie.
GO TO FULL VERSION