Java 匿名线程的异常

Java 匿名线程的异常,java,javadoc,Java,Javadoc,我试图用异常来包围我的代码,这样我就不会有任何内存泄漏。 我尝试了下面的代码,由于某种原因,没有处理异常,因此出现了运行时错误 一些代码: try { methodA(); } catch (Throwable th) { MsgProxyLogger.error(TAG, th.getMessage()); } } protected void methodA()

我试图用异常来包围我的代码,这样我就不会有任何内存泄漏。 我尝试了下面的代码,由于某种原因,没有处理异常,因此出现了运行时错误

一些代码:

   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();
   }  
现在,如果线程中发生了一些运行时异常,它不会被throable子句捕获吗

为什么呢?匿名线程是否正在取消catch子句

谢谢

雷。

不幸的是,没有

try-catch块只能捕获到Thread.Start()方法(即内存不足)。但是,一旦线程启动,或者更好地说,被安排为启动,您将失去对它的控制

如果未处理的异常超出线程范围,JVM将崩溃。您应该使用try-catch来包围内部匿名方法

希望能有所帮助

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

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

有两种解决方案:

  • run
    方法中放置
    try
    /
    catch
    ,以处理异常
  • 向子线程或其
    线程组注册
    UncaughtExceptionHandler
顺便说一句,如果您担心异常会导致资源泄漏,最好的解决方案是使用以下模式编写代码:

    Resource r = // allocate resource
    try {
        // use resource r
    } catch (...) {
        ...
    } finally {
        // release resource r
    }
仅仅捕获和记录异常(就像您的示例代码那样)并不能解决资源泄漏问题