ThreadPoolExecutor#afterExecute()
yönteminde çalışan iş parçacıklarının attığı istisnaları işlemek istiyorum. Ben kodu çalıştırırsanız ben çıktısını almakThreadPoolExecutor'ın afterExecute() işlevinde neden istisna sıfırdır?
public class MyExecutor extends ThreadPoolExecutor {
public static void main(String[] args) {
MyExecutor threadPool = new MyExecutor();
Task<Object> task = new Task<>();
threadPool.submit(task);
}
public MyExecutor() {
super(4, 20, 60, TimeUnit.SECONDS, new LinkedBlockingQueue<>(4000));
}
@Override
protected void afterExecute(Runnable r, Throwable t) {
super.afterExecute(r, t);
System.out.println("in afterExecute()");
if (t != null) {
System.out.println("exception thrown: " + t.getMessage());
} else {
System.out.println("t == null");
}
}
private static class Task<V> implements Callable<V> {
@Override
public V call() throws Exception {
System.out.println("in call()");
throw new SQLException("testing..");
}
}
}
:
in call()
in afterExecute()
t == null
Neden afterExecute()
parametre Throwable t
null
olduğu anda bu kod var? SQLException
örneği olmasın mı?
Bunu temizlediğiniz için teşekkür ederiz. Yani kontrol edilen istisnalar sadece ThreadPoolExecutor tarafından yutulacak mı? Ve tüm istisna işleme Callable # call() içinde yapılmalıdır? –
@ potato300 Düzenlemem görün, özel örneğinizde başka bir şey var (önce ben fark etmedim) – Tunaki