"Halo, Amigo! Ini pertanyaan menarik yang sudah Anda miliki atau akan segera Anda miliki. Bagaimana Anda menghentikan utas yang sedang berjalan? "

Katakanlah pengguna memberi tahu program untuk «mengunduh file dari Internet». Utas utama membuat utas anak terpisah untuk pekerjaan ini, dan meneruskannya ke objek yang metode jalankan berisi semua tindakan yang diperlukan untuk mengunduh file.

Tapi tiba-tiba pengguna berubah pikiran. Dia tidak ingin mendownload file tersebut. Bagaimana kita membatalkan pekerjaan dan menghentikan utas?

"Ya, katakan padaku bagaimana caranya?"

" Kami tidak bisa. Itu jawaban yang paling umum dan paling benar. Anda tidak bisa menghentikan utas. Hanya utas yang bisa berhenti sendiri. "

Tetapi Anda dapat mengirim sinyal ke utas, dengan cara tertentu mengatakan bahwa pekerjaan tidak lagi perlu dilakukan dan harus diakhiri. Sama seperti utas utama berakhir dengan kembali dari metode utama, utas anak diakhiri dengan kembali dari metode run.

"Apa cara terbaik untuk melakukannya?"

"Anda dapat menambahkan beberapa variabel, seperti boolean . Jika benar , utas berjalan. Jika salah ,  utas harus diakhiri. Seperti ini, misalnya:"

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

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

Kelas Jam menulis «Tick» ke konsol satu detik sekali selamanya

Jika ClockManager.isClockRun salah, metode run berakhir.

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 memulai utas anak (jam) yang harus berjalan selamanya

Tunggu 10 detik dan beri jam sinyal untuk mengakhiri.

Utas utama menyelesaikan pekerjaannya.

Utas jam mengakhiri pekerjaannya.

"Bagaimana jika kita memiliki beberapa utas, lalu bagaimana?"

"Yang terbaik adalah memiliki variabel seperti itu untuk setiap utas. Akan lebih mudah untuk menambahkannya langsung ke kelas. Anda bisa menambahkan variabel boolean isRun di sana. Namun, lebih baik menambahkan variabel boolean isCancel yang menjadi true jika tugasnya adalah dibatalkan."

Kode Keterangan
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 menulis kata «Tick» ke konsol satu detik sekali selama isCancel salah.

Ketika isCancel menjadi true, metode run berakhir.

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

Thread.sleep(10000);
clock.cancel();
}
Utas utama memulai utas anak (jam) yang harus berjalan selamanya

Tunggu 10 detik dan  batalkan tugas dengan memanggil metode batal.

Utas utama menyelesaikan pekerjaannya.

Utas jam mengakhiri pekerjaannya.

"Aku akan mengingat ini. Terima kasih, Ellie."