"Merhaba Amigo! Ellie'nin İptal fikrinin harika olduğunu kabul etmelisin."

"Evet."

"Aslında, Thread sınıfında benzer bir şey var . Yalnızca değişkenin adı isCancel değil . Adı isInterrupt . Ve iş parçacığını durdurmak için kullanılan yöntem cancel() değil . Bu interrupt() ."

"Gerçekten mi?"

"Evet. Şuna bir bak:"

kod Tanım
class Clock implements Runnable
{
public void run()
{
Thread current = Thread.currentThread();

while (!current.isInterrupted())
{
Thread.sleep(1000);
System.out.println("Tick");
}
}
}
Birkaç iş parçacığı aynı Clock nesnesinde run yöntemini çağırabileceğinden , geçerli iş parçacığı için Thread nesnesini alırız .

Clock sınıfı, geçerli iş parçacığının isInterrupt değişkeni yanlış olduğu sürece konsola saniyede bir "Tick" sözcüğü yazar .

isInterrupt true olduğunda , çalıştırma yöntemi sona erer  .

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

Thread.sleep(10000);
clockThread.interrupt();
}
Ana iş parçacığı, sonsuza kadar çalışması gereken bir alt iş parçacığı (saat) başlatır.

10 saniye bekleyin ve  interrupt yöntemini çağırarak görevi iptal edin .

Ana iş parçacığı işini tamamlar.

Saat iş parçacığı işini bitirir.

Ayrıca run yönteminde insanların sonsuz döngülerde kullanmayı çok sevdikleri uyku yöntemi , isInterrupt değişkenini otomatik olarak kontrol eder . Bir iş parçacığı uyku yöntemini çağırırsa , yöntem önce o iş parçacığı için isInterrupt'un doğru olup olmadığını kontrol eder. Doğruysa, yöntem uyumaz. Bunun yerine, bir InterruptedException istisnası atar .

"Neden bir istisna atalım? Bir döngüye isInterrupted() yerine isCancel() koymak daha iyi olmaz mıydı?"

" Öncelikle , run yönteminin her zaman bir döngüsü yoktur. Yöntem, diğer yöntemlere yapılan birkaç düzine çağrıdan oluşabilir. O zaman, her yöntem çağrısından önce bir isInterrupted denetimi eklemeniz gerekir."

" İkincisi , pek çok farklı eylem içeren bazı yöntemlerin uygulanması çok uzun zaman alabilir."

" Üçüncüsü , bir istisna atmak isInterrupted kontrolünün yerine geçmez. Bu sadece uygun bir eklemedir. Atılan istisna, çağrı yığınını hızlı bir şekilde run yönteminin kendisine geri sarmanıza olanak tanır. "

" Dördüncüsü , uyku yöntemi çok kullanılıyor. Görünen o ki, bu yararlı yöntem, daha az yardımcı olmayan örtülü bir denetimle geliştirilmiş. Sanki kimse özel olarak çek eklememiş gibi, ama işte orada . başkasının kodunu kullanıyorsunuz ve çeki kendiniz ekleyemezsiniz."

" Beşincisi , ek kontrol performansı düşürmez. Uyku yöntemini çağırmak, iş parçacığının (uyku dışında) hiçbir şey yapmaması gerektiği anlamına gelir, bu nedenle fazladan çalışma kimseyi rahatsız etmez."

"Bunlar ciddi tartışmalar."

"Ve son olarak , şu var: Çalıştırma yönteminiz başka birinin kodunu, yani erişiminizin olmadığı kodu (kaynak kodu ve/veya kodu değiştirme haklarınız) çağırabilir. isInterrupted kontrolleri olmayabilir ve kullanabilir " tüm istisnaları yakalamak için ... catch (İstisna e) " deneyin ."

Bir dizinin durdurulacağını kimse garanti edemez. Yalnızca bir iş parçacığı kendini durdurabilir.