"Hello, Amigo! Aminin mo na napakatalino ng Cancel idea ni Ellie."

"Oo."

"Sa totoo lang, may katulad na umiiral sa klase ng Thread . Ang variable lang ang hindi tinatawag na isCancel . Ito ay tinatawag na isInterrupt . At ang paraan na ginamit upang ihinto ang thread ay hindi cancel() . Ito ay interrupt() ."

"Talaga?"

"Oo. Tingnan mo:"

Code Paglalarawan
class Clock implements Runnable
{
public void run()
{
Thread current = Thread.currentThread();

while (!current.isInterrupted())
{
Thread.sleep(1000);
System.out.println("Tick");
}
}
}
Dahil maraming thread ang maaaring tumawag sa run method sa parehong Clock object, nakukuha namin ang Thread object para sa kasalukuyang thread .

Isinulat ng klase ng Orasan ang salitang "Tikkan" sa console nang isang beses sa isang segundo hangga't mali ang variable na isInterrupt ng kasalukuyang thread.

Kapag naging totoo ang isInterrupt ,  matatapos ang run method.

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

Thread.sleep(10000);
clockThread.interrupt();
}
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 interrupt na paraan.

Nakumpleto ng pangunahing thread ang trabaho nito.

Ang thread ng orasan ay nagtatapos sa trabaho nito.

Bukod dito, ang paraan ng pagtulog , na gustung-gusto ng mga tao na gamitin sa walang katapusang mga loop sa paraan ng pagtakbo , ay awtomatikong sinusuri ang variable na isInterrupt . Kung tinawag ng isang thread ang paraan ng pagtulog , susuriin muna ng pamamaraan kung totoo ang isInterrupt para sa thread na iyon. Kung ito ay totoo, ang pamamaraan ay hindi matutulog. Sa halip, nagtatapon ito ng InterruptedException exception.

"Bakit magtapon ng exception? Hindi ba mas mabuting ilagay na lang ang isInterrupted() sa halip na isCancel() sa isang loop?"

" Una , ang run method ay hindi palaging may loop. Ang pamamaraan ay maaaring binubuo lamang ng ilang dosenang mga tawag sa iba pang mga pamamaraan. Pagkatapos ay kailangan mong magdagdag ng isInterrupted check bago ang bawat method call."

" Pangalawa , ang ilang paraan na nagsasangkot ng maraming iba't ibang mga aksyon ay maaaring tumagal ng napakatagal na panahon upang maisagawa."

" Pangatlo , hindi pinapalitan ng paghahagis ng exception ang isInterrupted check. Isa lang itong maginhawang karagdagan. Hinahayaan ka ng itinapon na exception na mabilis na i-unwind ang call stack pabalik sa run method mismo."

" Pang-apat , ang paraan ng pagtulog ay madalas na ginagamit. Sa lumalabas, ang kapaki-pakinabang na paraan na ito ay pinahusay ng isang implicit na tseke na hindi gaanong nakakatulong. Para bang walang partikular na nagdagdag ng tseke, ngunit nariyan ito. Ito ay sobrang mahalaga kapag gumagamit ka ng code ng ibang tao at hindi mo maidaragdag ang tseke sa iyong sarili."

" Ikalima , ang karagdagang pagsusuri ay hindi nagpapababa ng pagganap. Ang pagtawag sa paraan ng pagtulog ay nangangahulugan na ang thread ay hindi dapat gumawa ng anumang bagay (maliban sa pagtulog), kaya ang labis na trabaho ay hindi nakakaabala sa sinuman."

"Mga seryosong argumento yan."

"At, sa wakas , nariyan ito: Maaaring tawagan ng iyong paraan ng pagpapatakbo ang code ng ibang tao—code na wala kang access (source code at/o mga karapatang baguhin ang code). Maaaring wala itong isInterrupted na mga pagsusuri, at maaari itong gumamit " try ... catch (Exception e) " para mahuli ang lahat ng exception."

Walang makakagarantiya na ang isang thread ay ititigil. Isang thread lang ang makakapigil sa sarili.