"Merhaba Amigo! İşte sana zaten sahip olduğun ya da yakında sahip olacağın ilginç bir soru. Devam eden bir ileti dizisini nasıl durdurursun? "

Diyelim ki kullanıcı programa «İnternetten bir dosya indirmesini» söyledi. Ana iş parçacığı, bu iş için ayrı bir alt iş parçacığı oluşturur ve onu, çalıştırma yöntemi dosyayı indirmek için gerekli tüm eylemleri içeren bir nesneye iletir.

Ancak kullanıcı aniden fikrini değiştirir. Dosyayı indirmek istemiyor. Bir işi nasıl iptal edip ileti dizisini nasıl durdurabiliriz?

"Evet, nasıl olduğunu söyle bana?"

" Yapamayız. Bu en yaygın ve en doğru cevaptır. Bir ileti dizisini durduramazsınız. Yalnızca o kendi kendini durdurabilir. "

Ancak bir iş parçacığına bir şekilde işin artık yapılması gerekmediğini ve sona erdirilmesi gerektiğini söyleyen bir sinyal gönderebilirsiniz. Ana iş parçacığının ana yöntemden dönerek sona ermesi gibi, bir alt iş parçacığı da run yönteminden dönerek sona erer.

"Bunu yapmanın en iyi yolu nedir?"

"Bir boolean gibi bir değişken ekleyebilirsiniz . Eğer true ise, thread çalışır. false ise  , thread sonlandırılmalıdır. Bunun gibi, örneğin:"

kod Tanım
class Clock implements Runnable
{
public void run()
{
while (true)
{
Thread.sleep(1000);
System.out.println("Tick");

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

Clock sınıfı konsola saniyede bir sonsuza kadar «Tick» yazar.

ClockManager.isClockRun yanlışsa, çalıştırma yöntemi sona erer.

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

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

10 saniye bekleyin ve saate bitmesi için bir sinyal verin.

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

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

"Ya birkaç başlığımız varsa, o zaman ne olacak?"

"Her iş parçacığı için böyle bir değişkene sahip olmak en iyisidir. Bunu doğrudan sınıfa eklemek en uygunudur. Buraya bir boolean isRun değişkeni ekleyebilirsiniz. Ancak, görev şu durumda doğru hale gelen bir boolean isCancel değişkeni eklemek daha iyidir. iptal edildi."

kod Tanım
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");
}
}
}
Clock sınıfı, isCancel false olduğu sürece saniyede bir kez «Tick» sözcüğünü konsola yazar .

isCancel true olduğunda , çalıştırma yöntemi sonlandırılır.

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

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

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

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

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

"Bunu aklımda tutacağım. Sağ ol Ellie."