Зачем мне нужен try-catch с бросками в моем примере?

1

Может кто-то, пожалуйста, помогите мне понять, почему мне нужно использовать (внутренний) try catch, если метод объявлен как бросающий одно и то же исключение.

    public static void main(String[] args) throws InterruptedException {
        Thread t1 = new Thread(new Runnable() {

            public void run() {
                // TODO Auto-generated method stub
                try {
                    producer();
                } catch (InterruptedException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
        });
        t1.start();
        t1.join();
    }

синтаксис производителя()

private static void producer() throws InterruptedException

Теги:
multithreading

2 ответа

4
Лучший ответ

Ответ заключается в том, что вы определяете анонимный класс.

Thread t1 = new Thread(new Runnable() {

        public void run() {            
            try {
                producer(); //This is called in run method!
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    });

Объявление метода, вызывающего producer() является public void run() и этот метод не выдает проверенное исключение. Поэтому вы должны поймать его.

  • 0
    так происходит из-за внутреннего класса. Большое спасибо.
  • 0
    @ Ashish Добро пожаловать!
Показать ещё 1 комментарий
0

Это логично, потому что вы начинаете новый поток, который может жить после выполнения, оставляет метод создания (если он не был main методом и если вы не использовали Thread.join()). Поэтому вы должны обрабатывать исключение самостоятельно.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню