Как распространить исключение из потока в java?

Код:

    outerMethod {
        @Override
        public void run() {
                innerMethod throws IOException
                }
    }

Метод, который выполняется в потоке, выдает проверенное исключение - IOException. Мне нужно обработать это исключение в основном потоке. Нравиться:

outerMethod() throws IOException
   {
        @Override
        public void run() {
                innerMethod() throws IOException
                }
    }

Это возможно? Если нет, то как лучше это сделать?

Спасибо.


person user710818    schedule 27.06.2012    source источник


Ответы (4)


Используйте FutureTask http://docs.oracle.com/javase/6/docs/api/java/util/concurrent/FutureTask.html#get%28%29 . Его методы get будут инкапсулировать любые исключения из задачи, которые могли выполняться в другом потоке.

ExecutionException: Исключение возникает при попытке получить результат задачи, которая была прервана путем создания исключения. Это исключение можно проверить с помощью метода Throwable.getCause().

person Gergely Szilagyi    schedule 27.06.2012

Поток — это отдельный процесс, и вы не можете распространять свое исключение на другой поток, поскольку они не могут общаться по маршруту исключения. Однако вы можете использовать межпотоковую связь, и вам придется логически обрабатывать случай, когда возникает исключение.

person bragboy    schedule 27.06.2012
comment
@user710818 : взгляните на это - youtube.com/watch?v=378DHU9IsS4 - person bragboy; 27.06.2012

Из этого документа API

Если поток определил UncaughtExceptionHandler, он будет вызван, в противном случае будет вызван UncaughtExceptionHandler группы потоков, если он определен, иначе он может перенаправить обработчик необработанных исключений по умолчанию.

person Eager    schedule 27.06.2012

Вы должны обрабатывать исключения внутри метода запуска:

        @Override
        public void run() {
           try {
              innerMethod();
           } catch (Exception e) {
             //handle e
           }
person Nandkumar Tekale    schedule 27.06.2012