"Hello, Amigo! Berikut ialah soalan menarik yang sama ada anda sudah ada atau tidak lama lagi. Bagaimana anda menghentikan benang yang sedang berjalan? "

Katakan pengguna memberitahu program untuk «memuat turun fail dari Internet». Benang utama mencipta benang kanak-kanak yang berasingan untuk tugas ini dan memberikannya objek yang kaedah lariannya mengandungi semua tindakan yang diperlukan untuk memuat turun fail.

Tetapi tiba-tiba pengguna berubah fikiran. Dia tidak mahu memuat turun fail. Bagaimanakah kita membatalkan kerja dan menghentikan rangkaian?

"Ya, beritahu saya bagaimana?"

" Kami tidak boleh. Itulah jawapan yang paling biasa dan paling betul. Anda tidak boleh menghentikan benang. Hanya ia boleh menghentikan dirinya sendiri. "

Tetapi anda boleh menghantar isyarat kepada benang, dalam beberapa cara memberitahunya bahawa kerja itu tidak lagi perlu dilakukan dan ia harus ditamatkan. Sama seperti utas utama ditamatkan dengan kembali daripada kaedah utama, utas kanak-kanak ditamatkan dengan kembali daripada kaedah larian.

"Apakah cara terbaik untuk melakukannya?"

"Anda boleh menambah beberapa pembolehubah, seperti boolean . Jika ia benar , urutan berjalan. Jika ia palsu  , urutan harus ditamatkan. Seperti ini, contohnya:"

Kod Penerangan
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 sekali sesaat selama-lamanya

Jika ClockManager.isClockRun adalah palsu, kaedah larian akan tamat.

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

}
Benang utama memulakan benang kanak-kanak (jam) yang sepatutnya berjalan selama-lamanya

Tunggu 10 saat dan beri isyarat jam untuk tamat.

Benang utama menyelesaikan kerjanya.

Benang jam menamatkan kerjanya.

"Bagaimana jika kita mempunyai beberapa benang, kemudian bagaimana?"

"Adalah yang terbaik untuk mempunyai pembolehubah sedemikian untuk setiap utas. Paling mudah untuk menambahkannya terus ke kelas. Anda boleh menambah pembolehubah isRun boolean di sana. Walau bagaimanapun, adalah lebih baik untuk menambah pembolehubah isCancel boolean yang menjadi benar jika tugas itu dibatalkan."

Kod Penerangan
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 perkataan «Tick» ke konsol sekali sesaat selagi isCancel adalah palsu.

Apabila isCancel menjadi benar, kaedah larian ditamatkan.

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

Thread.sleep(10000);
clock.cancel();
}
Benang utama memulakan benang kanak-kanak (jam) yang sepatutnya berjalan selama-lamanya

Tunggu 10 saat dan  batalkan tugas dengan memanggil kaedah batal.

Benang utama menyelesaikan kerjanya.

Benang jam menamatkan kerjanya.

"Saya akan ingat ini. Terima kasih, Ellie."