2010-10-31 3 views
0

im пытается окружить мой код исключениями по всему, поэтому я не буду иметь утечек памяти. Я пробовал следующий код, и по какой-то причине исключение не обрабатывается, и я получаю ошибку времени выполнения.Исключения с анонимными потоками

некоторый код:

try 
     { 
      methodA(); 
     } catch (Throwable th) 
     { 
      MsgProxyLogger.error(TAG, th.getMessage()); 
     } 
    } 


protected void methodA() 
{ 


      Thread disptacherThread = new Thread() 
      { 

       @Override 
       public void run() 
       { 
        dispatcher.dispatch(existingMessagesArr); 
       } 
      }; 
      disptacherThread.start(); 
    } 

Теперь, если некоторые выполнения исключение occurse внутри потока, он не будет пойман в throable пунктах?

Почему это так? Анонимный поток отменяет предложения catch?

Thanks,

ray.

ответ

0

Теперь, если в потоке встречается какое-то исключение во время выполнения, его не поймают в бросающихся предложениях?

Это правильно. A try/catch может перехватывать исключения, выдаваемые текущей нитью. Код в анонимном методе Runnable run выполняется в другом потоке.

Есть два решения этого:

  • Помещенный try/catch в методе run иметь дело с исключением.
  • Зарегистрируйте UncaughtExceptionHandler либо с дочерней нитью, либо с ее ThreadGroup.

Кстати, если вы обеспокоены тем, с исключениями, вызывающих утечки ресурсов, то лучшим решением будет написать свой код, используя этот шаблон:

Resource r = // allocate resource 
    try { 
     // use resource r 
    } catch (...) { 
     ... 
    } finally { 
     // release resource r 
    } 

Просто отлова и исключения протоколирования (как это ваш пример кода) будет не вылечить утечку ресурсов.

1

К сожалению, нет.

Блок try-catch способен ловить только до метода Thread.Start() (то есть из памяти). Но как только поток запущен или лучше, был запланирован на запуск, вы потеряете контроль над ним.

Если исключение unhandlex выходит за пределы области видимости вашей JVM, произойдет сбой. Вы должны окружить свой внутренний анонимный метод с помощью try-catch.

Надежды на помощь.

Смежные вопросы