"Hej, Amigo! Her er et interessant spørgsmål, som du enten allerede har haft, eller også vil du snart. Hvordan stopper du en løbende tråd? "

Lad os sige, at brugeren fortæller programmet at «downloade en fil fra internettet». Hovedtråden opretter en separat undertråd til dette job og sender det et objekt, hvis kørselsmetode indeholder alle de nødvendige handlinger for at downloade filen.

Men pludselig ændrer brugeren mening. Han ønsker ikke at downloade filen. Hvordan annullerer vi et job og stopper tråden?

"Ja, fortæl mig hvordan?"

"Det kan vi ikke. Det er det mest almindelige og mest korrekte svar. Du kan ikke stoppe en tråd. Kun den kan stoppe sig selv. "

Men du kan sende et signal til en tråd og på en eller anden måde fortælle den, at arbejdet ikke længere skal udføres, og at det skal afsluttes. Ligesom hovedtråden afsluttes ved at vende tilbage fra hovedmetoden, afsluttes en undertråd ved at vende tilbage fra kørselsmetoden.

"Hvad er den bedste måde at gøre det på?"

"Du kan tilføje en eller anden variabel, f.eks. en boolesk . Hvis det er sandt , kører tråden. Hvis den er falsk  , skal tråden afsluttes. Som dette, for eksempel:"

Kode Beskrivelse
class Clock implements Runnable
{
public void run()
{
while (true)
{
Thread.sleep(1000);
System.out.println("Tick");

if (!ClockManager.isClockRun)
return;
}
}
}

Ur-klassen skriver "Tick" til konsollen en gang i sekundet for altid

Hvis ClockManager.isClockRun er falsk, afsluttes kørselsmetoden.

class ClockManager
{
public static boolean isClockRun = true;
public static void main(String[] args)
{
Clock clock = new Clock();
Thread clockThread = new Thread(clock);
clockThread.start();

Thread.sleep(10000);
isClockRun = false;
}

}
Hovedtråden starter en undertråd (ur), der skal køre for evigt

Vent 10 sekunder og giv uret et signal om at slutte.

Hovedtråden fuldender sit arbejde.

Urtråden afslutter sit arbejde.

"Hvad hvis vi har flere tråde, hvad så?"

"Det er bedst at have en sådan variabel for hver tråd. Det er mest praktisk at tilføje den direkte til klassen. Du kan tilføje en boolsk isRun- variabel der. Det er dog bedre at tilføje en boolsk isCancel -variabel, der bliver sand, hvis opgaven er aflyst."

Kode Beskrivelse
class Clock implements Runnable
{
private boolean isCancel = false;

public void cancel()
{
this.isCancel = true;
}

public void run()
{
while (!isCancel)
{
Thread.sleep(1000);
System.out.println("Tick");
}
}
}
Clock-klassen skriver ordet «Tick» til konsollen én gang i sekundet, så længe isCancel er falsk.

Når isCancel bliver sandt, afsluttes kørselsmetoden.

public static void main(String[] args)
{
Clock clock = new Clock();
Thread clockThread = new Thread(clock);
clockThread.start();

Thread.sleep(10000);
clock.cancel();
}
Hovedtråden starter en undertråd (ur), der skal køre for evigt

Vent 10 sekunder og  annuller opgaven ved at kalde annulleringsmetoden.

Hovedtråden fuldender sit arbejde.

Urtråden afslutter sit arbejde.

"Jeg vil huske det. Tak, Ellie."