2010-10-31 38 views
0

即时尝试围绕我的代码与异常遍及所以我不会有任何内存泄漏。 我尝试了下面的代码,出于某种原因异常没有被处理,我得到运行时错误。例外与匿名线程

一些代码:

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子句?

谢谢,

ray。

回答

0

现在,如果在线程内发生一些运行时异常,它不会被throwable子句捕获?

这是正确的。 A try/catch只能捕获当前线程抛出的异常。匿名Runnable的run方法中的代码在不同的线程上执行。

有两个解决办法:

  • 将一个try/catchrun方法来处理异常。
  • 注册的UncaughtExceptionHandler或者与子线程,或者其ThreadGroup

顺便说一句,如果你关心导致资源泄漏的异常,最好的解决办法是使用这种模式编写代码:

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

简单地捕捉和记录异常(如您的示例代码执行)会不能治愈资源泄漏。

1

不幸的不是。

的try-catch块是能够赶上仅达Thread.Start()方法(即出的存储器)。但是一旦线程启动,或者更好,已经计划开始​​,您将失去对它的控制。

如果unhandlex例外而来的线程范围之外的JVM会崩溃。你应该用try-catch来包围你的内部匿名方法。

希望能有所帮助。