"Merhaba, Amigo!
"Sana küçük ama ilginç bir şeyden bahsetmek istiyorum."
"Dinliyorum. Küçük ve ilginç şeyleri seviyorum."
"Eh, her Thread nesnesinin bir run() yöntemi olduğunu biliyorsun. Ve bunu start() yöntemini kullanarak ayrı bir dizide çalıştırabileceğini biliyorsun."
"Evet elbette."
"Fakat şimdi şu durumu hayal edin: bir iş yapmak için bir iş parçacığı başlatıyorsunuz, ancak bir istisna atılıyor ve iş parçacığı ne yapacağını bilmediği için çalışmayı durduruyor. Bir şekilde bu hatayı bilmeniz gerekmez mi?"
"Kabul ediyorum. Çalışan diğer iş parçacığında meydana gelen istisnayı bir şekilde yakalamam gerekiyor. Java bunu destekliyor mu?"
"Bana hakaret ediyorsun. Tabii ki ediyor."
"Java'nın yaratıcıları, UncaughtExceptionHandler adında özel bir arabirim icat ettiler. Başka bir iş parçacığında meydana gelen bir istisnayı, o iş parçacığı onu yakalamazsa, şu şekilde yakalayabilir ve işleyebilirsiniz:"
public class DownloadManager
{
public static void main(String[] args)
{
Thread thread = new DownloadThread();
thread.setUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler()
{
@Override
public void uncaughtException(Thread t, Throwable e)
{
}
});
thread.start();
}
"Thread nesnesinin özel bir setUncaughtExceptionHandler yöntemi vardır. Ona Thread.UncaughtExceptionHandler arabirimini uygulayan bir nesne iletmeniz gerekir . Bu arabirimin yalnızca bir yöntemi vardır: uncaughtException(Thread t, Throwable e) . Bu, üzerinde çağrılacak olan yöntemdir. run yönteminde yakalanmamış bir özel durum oluşursa iletilen nesne."
"Yukarıdaki örneğimde, Thread.Thread.UncaughtExceptionHandler arabirimini uygulayan anonim bir iç sınıf (kırmızıyla vurgulanmış) ilan ediyorum . Ve uncaughtException(Thread t, Throwable e) yöntemini geçersiz kılıyorum ."
"Metodun parametre listesinden görebileceğiniz gibi, iki argüman iletilecek: özel durumun oluştuğu Thread nesnesine bir başvuru ve özel durumun kendisi, Atılabilir e olarak iletildi."
"Peki, neden t Thread değişkenine ihtiyacım var? Hangi Thread'e bir Thread.UncaughtExceptionHandler nesnesi koyduğumuzu zaten bilmiyor muyuz ?"
"Bunu, bu durumlar için evrensel bir işleyici yazabilmeniz için yaptılar. Yani, tek bir nesne oluşturabilir ve onu düzinelerce farklı iş parçacığına geçirebilirsiniz. Sonra uncaughtException (Thread t, Throwable e) yöntemi size her zaman İstisnanın oluştuğu nesneyi işleyin."
"Ayrıca, örneğin belirli görevleri gerçekleştirmek için bir döngüde düzinelerce iş parçacığı oluşturabilirsiniz. Genel olarak, Thread nesnesine yapılan bu başvuru gereksiz olmayacaktır. Size söz veriyorum."
"Sana inanıyorum. Hiç yanılmadın."
GO TO FULL VERSION