Bir iş parçacığında run() yöntemini çağırırsam ve run() yöntemi yakalanmamış bir istisna atarsa sonuç ne olur?Bir Thread bir Özel Durum atarsa ne olur?
Bu Özel Durumu kim yakalar? Yakalanmış mı?
Bir iş parçacığında run() yöntemini çağırırsam ve run() yöntemi yakalanmamış bir istisna atarsa sonuç ne olur?Bir Thread bir Özel Durum atarsa ne olur?
Bu Özel Durumu kim yakalar? Yakalanmış mı?
ThreadGroup için bir istisna işleyicisi yüklüyse, JVM istisnayı ona geçirir. AWT iş parçacığı değilse, işlenmeyen özel durumlar için bir olay işleyicisi yükleyebilirsiniz. Aksi halde JVM onu ele alır.
özel işleyicisi ile bir iplik grubu örneği ve nasıl kullanılacağını: Bir üzere Runnable gönderdiyseniz
public class MyExceptionHandler {
public void handle(Throwable ex) {
// Handle exception
}
public void handle(Thread t, Throwable ex) {
// Handle exception
}
}
System.setProperty("sun.awt.exception.handler", MyExceptionHandler.class.getName());
"Aksi takdirde JVM bunu işliyor." Daha kesin olmak gerekirse, istisnayı ortaya çıkaran iplik sessizce ölecektir. –
@Stephen: Aslında bu özel durumu stderr'e yazdırır. – Draemon
Gerçekten mi? JVM'ye özgü olmalı o zaman ... çünkü bir yığın izinin yokluğuna kapıldım. –
Bunu, uncaughtException(Thread, Throwable) yöntemini uygulayan ThreadGroup'a atayabilirsiniz.
: Bir AWT istisna işleyicisi kullanmanın
public class MyThreadGroup extends ThreadGroup {
public MyThreadGroup() {
super("My Thread Group");
}
public void uncaughtException(Thread t, Throwable ex) {
// Handle exception
}
}
Thread t = new Thread(new MyThreadGroup(), "My Thread") { ... };
t.start();
Örnek ExecutorService, ExecutionException içine sarılmış Özel Durumu yakalayabilirsiniz. (Sadece koşarak çağırma() için önerilir)
Bunu daha açık hale getirmek için - run() işlevini çağırmazsınız - kodun run() yönteminde kodu yeni yapmak için iş parçacığında start() öğesini çağırırsınız iplik. Run() 'ı doğrudan çağırmak sadece run yöntemini geçerli thread içinde yürütür. – Nate