"Helló, Amigo! Itt van egy érdekes kérdés, ami vagy már felmerült, vagy hamarosan meg fog tenni. Hogyan lehet megállítani egy futó szálat? "
Tegyük fel, hogy a felhasználó azt mondja a programnak, hogy «töltsön le egy fájlt az internetről». A fő szál külön gyermekszálat hoz létre ehhez a feladathoz, és átad neki egy objektumot, amelynek futtatási metódusa tartalmazza a fájl letöltéséhez szükséges összes műveletet.
De a felhasználó hirtelen meggondolja magát. Nem akarja letölteni a fájlt. Hogyan mondhatunk le egy munkát és állíthatjuk le a szálat?
– Igen, mondd el, hogyan?
" Nem tehetjük. Ez a leggyakoribb és leghelyesebb válasz. Egy szálat nem lehet leállítani. Csak az tudja megállítani magát. "
De küldhet egy jelet egy szálnak, valamilyen módon közli vele, hogy a munkát már nem kell elvégezni, és be kell fejezni. Ahogy a fő szál a fő metódusból való visszatéréssel ér véget, a gyermekszál a futtatási metódusból való visszatéréssel ér véget.
– Mi a legjobb módja ennek?
"Hozzáadhat néhány változót, például egy logikai értéket . Ha igaz , a szál lefut. Ha hamis , a szálnak meg kell szakadnia. Például így:"
Kód | Leírás |
---|---|
|
Az Óra osztály másodpercenként egyszer „Tick”-et ír a konzolra örökké Ha a ClockManager.isClockRun értéke hamis, a futtatási metódus véget ér. |
|
A főszál egy gyermekszálat (órát) indít el, amelynek örökké futnia kell
Várjon 10 másodpercet, és adjon jelet az órának, hogy véget ér. A főszál befejezi a munkáját. Az óraszál befejezi munkáját. |
– Mi van, ha több szálunk van, akkor mi van?
"A legjobb, ha minden szálhoz van egy ilyen változó. A legkényelmesebb, ha közvetlenül az osztályhoz adja hozzá. Ott felvehet egy logikai isRun változót. Azonban jobb, ha hozzáad egy logikai isCancel változót, amely igaz lesz , ha a feladat törölve."
Kód | Leírás |
---|---|
|
Az Óra osztály másodpercenként egyszer írja a „Tick” szót a konzolra, amíg az isCancel hamis.
Amikor az isCancel igazsá válik, a futtatási metódus leáll. |
|
A főszál egy gyermekszálat (órát) indít el, amelynek örökké futnia kell
Várjon 10 másodpercet, és törölje a feladatot a törlési metódus hívásával. A főszál befejezi a munkáját. Az óraszál befejezi munkáját. |
– Ezt észben fogom tartani. Köszönöm, Ellie.
GO TO FULL VERSION