"Halo, Amigo! Iki pitakonan menarik sing wis utawa sampeyan bakal rauh. Carane mungkasi thread mlaku? "

Ayo dadi ngomong pangguna ngandhani program kanggo «download file saka Internet». Utas utama nggawe utas anak sing kapisah kanggo proyek iki, lan ngliwati obyek sing cara mbukak ngemot kabeh tumindak sing dibutuhake kanggo ngundhuh file kasebut.

Nanging dumadakan pangguna ngganti pikirane. Dheweke ora pengin ngundhuh file kasebut. Kepiye carane mbatalake proyek lan mungkasi thread kasebut?

"Iya, ngomong piye carane?"

" Kita ora bisa. Iku jawaban sing paling umum lan paling bener. Sampeyan ora bisa mungkasi thread. Mung bisa mandheg dhewe. "

Nanging sampeyan bisa ngirim sinyal menyang thread, ing sawetara cara ngandhani yen karya ora perlu dileksanakake maneh lan kudu mungkasi. Kaya thread utama mungkasi kanthi bali saka cara utama, thread anak mungkasi kanthi bali saka cara roto.

"Apa cara sing paling apik kanggo nindakake?"

"Sampeyan bisa nambah sawetara variabel, kayata boolean . Yen bener , thread mlaku. Yen palsu  , thread kudu mungkasi. Kaya iki, contone:"

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

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

Kelas Jam nyerat «Obah» menyang console sapisan detik ing salawas-lawase

Yen ClockManager.isClockRun palsu, cara roto ends.

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

}
Utas utama miwiti utas anak (jam) sing kudu mlaku ing salawas-lawase

Enteni 10 detik lan menehi tandha jam kanggo mungkasi.

Utas utama ngrampungake karyane.

Utas jam mungkasi karyane.

"Apa yen kita duwe sawetara utas, banjur apa?"

"Paling apik kanggo duwe variabel kuwi kanggo saben thread. Iku paling trep kanggo nambah langsung menyang kelas. Sampeyan bisa nambah boolean isRun variabel ana. Nanging, iku luwih apik kanggo nambah boolean isCancel variabel sing dadi bener yen tugas punika dibatalake."

Kode Katrangan
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");
}
}
}
Kelas Jam nulis tembung «Obah» menyang console sapisan sapisan anggere isCancel palsu.

Nalika isCancel dadi bener, cara run bakal mandheg.

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

Thread.sleep(10000);
clock.cancel();
}
Utas utama miwiti utas anak (jam) sing kudu mlaku ing salawas-lawase

Enteni 10 detik lan  mbatalake tugas kanthi nelpon metode mbatalake.

Utas utama ngrampungake karyane.

Utas jam mungkasi karyane.

"Aku bakal mbudidaya iki. Thanks, Ellie."