Почему не нужно ручка Exception броска по отзывному интерфейсу

Адриан:

У меня есть код снайперский, как это:

import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

public class UserManagementApplication {
    public static void main(String[] args) throws InterruptedException, ExecutionException {
        ExecutorService es = Executors.newSingleThreadExecutor();
        MyCallable callable = new MyCallable(10);
        MyThread thread = new MyThread(10);
        System.out.println(es.submit(callable).get());
        System.out.println(es.submit(thread).get());
        es.shutdown();
    }
}

class MyCallable implements Callable<Integer> {
    private Integer i;

    public MyCallable(Integer i) {
        this.i = i;
    }

    @Override
    public Integer call() throws Exception {
        return --i;
    }
}

class MyThread extends Thread {
    private int i;

    MyThread(int i) {
        this.i = i;
    }

    @Override
    public void run() {
        i++;
    }
}

Я не понимаю , почему компилятор не жалуется на основном , потому что MyCallable есть метод , который объявлен как бросает исключение. Я уверен , что я пропускаю что - то очевидное здесь , но просто я не могу увидеть его прямо сейчас. Благодарность

akuzminykh :

Исключение в отдельном потоке , поэтому вам не нужно обрабатывать его непосредственно в главном потоке. Если call()сгенерирует исключение отделено нить даст вам знать , над ExecutionException.

Вы должны понимать, что если поток завершается из-за ошибки не прерывает основной поток, или любой другой поток, потому что они отделенны тема. Обработка исключений имеет отношение только тогда, когда исключение Throwable в потоке код работает сам по себе.

рекомендация

отhttp://43.154.161.224:23101/article/api/json?id=16788&siteId=1