"Hej, Amigo! Här är en intressant fråga som du antingen redan har haft eller så kommer du snart. Hur stoppar du en pågående tråd? "
Låt oss säga att användaren säger åt programmet att «ladda ner en fil från Internet». Huvudtråden skapar en separat underordnad tråd för det här jobbet och skickar till det ett objekt vars körningsmetod innehåller alla nödvändiga åtgärder för att ladda ner filen.
Men plötsligt ändrar användaren sig. Han vill inte ladda ner filen. Hur avbryter vi ett jobb och stoppar tråden?
"Ja, berätta hur?"
"Det kan vi inte. Det är det vanligaste och mest korrekta svaret. Du kan inte stoppa en tråd. Bara den kan stoppa sig själv. "
Men du kan skicka en signal till en tråd, på något sätt berätta att arbetet inte längre behöver utföras och att det ska avslutas. Precis som huvudtråden avslutas genom att återvända från huvudmetoden, avslutas en undertråd genom att återvända från körningsmetoden.
"Vad är det bästa sättet att göra det?"
"Du kan lägga till någon variabel, t.ex. en boolesk . Om det är sant körs tråden. Om den är falsk ska tråden avslutas. Så här, till exempel:"
Koda | Beskrivning |
---|---|
|
Klassen Clock skriver «Tick» till konsolen en gång i sekunden för alltid Om ClockManager.isClockRun är falsk avslutas körningsmetoden. |
|
Huvudtråden startar en barntråd (klocka) som ska löpa för alltid
Vänta 10 sekunder och ge klockan en signal att sluta. Huvudtråden avslutar sitt arbete. Klocktråden avslutar sitt arbete. |
"Tänk om vi har flera trådar, vad då?"
"Det är bäst att ha en sådan variabel för varje tråd. Det är bekvämast att lägga till den direkt i klassen. Du kan lägga till en boolesk isRun -variabel där. Det är dock bättre att lägga till en boolesk isCancel -variabel som blir sann om uppgiften är inställt."
Koda | Beskrivning |
---|---|
|
Klassen Clock skriver ordet «Tick» till konsolen en gång i sekunden så länge isCancel är falskt.
När isCancel blir sant avslutas körmetoden. |
|
Huvudtråden startar en barntråd (klocka) som ska löpa för alltid
Vänta 10 sekunder och avbryt uppgiften genom att anropa avbrytmetoden. Huvudtråden avslutar sitt arbete. Klocktråden avslutar sitt arbete. |
"Jag ska ha det i åtanke. Tack, Ellie."
GO TO FULL VERSION