一些代码:
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子句吗?
谢谢,
射线。
答案 0 :(得分:1)
不幸的是没有。
try-catch块只能捕获Thread.Start()方法(即内存不足)。但是一旦线程启动或更好,已安排启动,您将失去对它的控制。
如果非处理异常超出了线程范围,则JVM将崩溃。你应该用try-catch包围你的内部匿名方法。
希望得到帮助。
答案 1 :(得分:0)
现在如果线程内部发生了某些运行时异常,它将不会被捕获到throwable子句中吗?
这是正确的。 try
/ catch
只能捕获当前线程抛出的异常。匿名Runnable的run
方法中的代码在不同的线程上执行。
有两种解决方案:
try
方法中加catch
/ run
来处理异常。UncaughtExceptionHandler
。ThreadGroup
顺便提一下,如果您担心导致资源泄漏的异常,最好的解决方案是使用以下模式编写代码:
Resource r = // allocate resource
try {
// use resource r
} catch (...) {
...
} finally {
// release resource r
}
简单地捕获和记录异常(如示例代码所做的那样)将无法解决资源泄漏问题。