"Hello, Amigo! Narito ang isang kawili-wiling tanong na mayroon ka na o malapit na. Paano mo ititigil ang tumatakbong thread? "

Sabihin nating sinabihan ng user ang program na «mag-download ng file mula sa Internet». Ang pangunahing thread ay lumilikha ng isang hiwalay na thread ng bata para sa trabahong ito, at ipinapasa ito ng isang bagay na ang paraan ng pagtakbo ay naglalaman ng lahat ng kinakailangang aksyon upang i-download ang file.

Ngunit biglang nagbago ang isip ng gumagamit. Ayaw niyang i-download ang file. Paano natin kakanselahin ang isang trabaho at ititigil ang thread?

"Oo, sabihin mo sa akin kung paano?"

" Hindi natin kaya. Iyan ang pinakakaraniwan at pinakatamang sagot. Hindi mo mapipigilan ang isang thread. Ito lang ang makakapigil sa sarili nito. "

Ngunit maaari kang magpadala ng isang senyas sa isang thread, sa ilang paraan na nagsasabi dito na ang trabaho ay hindi na kailangang isagawa at na dapat itong wakasan. Tulad ng pagwawakas ng pangunahing thread sa pamamagitan ng pagbabalik mula sa pangunahing pamamaraan, ang isang thread ng bata ay nagtatapos sa pamamagitan ng pagbabalik mula sa paraan ng pagtakbo.

"Ano ang pinakamahusay na paraan upang gawin iyon?"

"Maaari kang magdagdag ng ilang variable, gaya ng boolean . Kung true , tatakbo ang thread. Kung false  , dapat na wakasan ang thread. Tulad nito, halimbawa:"

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

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

Ang Clock class ay nagsusulat ng «Tick» sa console minsan sa isang segundo magpakailanman

Kung mali ang ClockManager.isClockRun, magtatapos ang paraan ng pagtakbo.

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;
}

}
Ang pangunahing thread ay nagsisimula ng isang child thread (orasan) na dapat tumakbo magpakailanman

Maghintay ng 10 segundo at bigyan ang orasan ng senyales upang matapos.

Nakumpleto ng pangunahing thread ang trabaho nito.

Ang thread ng orasan ay nagtatapos sa trabaho nito.

"Paano kung marami tayong thread, ano?"

"Pinakamainam na magkaroon ng ganoong variable para sa bawat thread. Ito ay pinaka-maginhawang idagdag ito nang direkta sa klase. Maaari kang magdagdag ng boolean isRun variable doon. Gayunpaman, ito ay mas mahusay na magdagdag ng boolean isCancel variable na magiging totoo kung ang gawain ay kinansela."

Code Paglalarawan
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");
}
}
}
Ang Clock class ay nagsusulat ng salitang «Tick» sa console nang isang beses sa isang segundo hangga't ang isCancel ay false.

Kapag naging totoo ang isCancel , magtatapos ang run method.

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

Thread.sleep(10000);
clock.cancel();
}
Ang pangunahing thread ay nagsisimula ng isang child thread (orasan) na dapat tumakbo magpakailanman

Maghintay ng 10 segundo at  kanselahin ang gawain sa pamamagitan ng pagtawag sa paraan ng pagkansela.

Nakumpleto ng pangunahing thread ang trabaho nito.

Ang thread ng orasan ay nagtatapos sa trabaho nito.

"I'll keep this in mind. Salamat, Ellie."