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
}
仅仅捕获和记录异常(就像您的示例代码那样)并不能解决资源泄漏问题