我们经常碰到线程突然死掉,但是又找不到原因,总不能在每个线程的run方法中都加上Try Catch吧, 况且对第三方框架内启的线程你想加Try catch还加不了呢? 怎么办?
现在有一个现成的办法,就是给每个线程"加个"默认的Try Catch, 任意一个线程出现没有捕获住的异常都执行我们自定义的那段代码。Thread中提供一个 setDefaultUncaughtExceptionHandler 的静态方法,给我们提供了这种可能。
代码贴出来如下:
class ExceptionHandler implements UncaughtExceptionHandler{
private final Logger logger = Logger.getLogger("Exception");
ExceptionHandler(){
FileHandler myFileHandler;
try {
myFileHandler = new FileHandler ("D:\\Logger.log");
SimpleFormatter formatter = new SimpleFormatter();
logger.addHandler(myFileHandler);
myFileHandler.setFormatter(formatter);
} catch (SecurityException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
@Override
public void uncaughtException(Thread t, Throwable e) {
logger.log(Level.ALL, "UncaughtException Thread ");
}
}
UncaughtExceptionHandler handle=new ExceptionHandler();
Thread.setDefaultUncaughtExceptionHandler(handle);
在程序启动的时候加入这一段。这样任何线程中,只有有没有被捕获的异常,都会执行我自定义的Handle的uncaughtException方法,把这个异常打印出来。
分享到:
相关推荐
如果线程起始函数中包含可能引发异常的操作,开发者需要在这些操作周围添加异常处理逻辑,确保异常被适当地捕获并处理。 除了确保线程起始函数正确无误外,创建和启动线程的过程也需要被仔细检查。创建线程并启动它...
标题 "debug程序,应用程序发生异常" 提到的问题主要涉及到软件开发中的调试环节,特别是当一个应用程序在执行过程中遇到异常情况,比如除零错误。在编程中,异常是程序执行时遇到的非正常情况,通常会导致程序崩溃...
- **多线程处理**:jNetPcap支持多线程捕获,可以在多个线程间分配数据包处理任务,提高处理效率。 - **事件驱动编程**:利用回调函数,可以在数据包到达时立即触发处理,避免了轮询检查的开销。 - **统计与...
5. 多重catch:Java 7后允许在一个catch块中捕获多种类型的异常,简化代码。 6. 异常链:记录异常发生过程,方便追踪问题源头。 以上就是基于“java复习提纲”的主要知识点,深入理解和熟练掌握这些内容,对于提升...
IllegalStateException是Java编程语言中定义的一种运行时异常,属于RuntimeException的子类,通常在程序尝试执行某个操作时,由于当前线程的状态不允许执行该操作,就会抛出此异常。这种异常表明代码试图在不适当的...
结果分析:只要异常没有被完全捕获,异常从发生异常的方法逐渐向外传播,首先传给该方法的调用者,该方法调用者再次创给其调用者……直至最后传到 main 方法,如果 main 方法依然没有处理该异常,JVM 会中止该程序,...
在源头上验证数据的完整性和正确性能够减少后续处理中出现异常的概率。 ### 同步和锁定 多线程环境下共享数据时,同步和锁定机制显得尤为重要。通过适当的同步措施,可以确保同一时间只有一个线程能对共享数据进行...
3. **异常处理** - 可以捕获并处理异步操作中的异常,提供更健壮的错误处理机制。 4. **链式调用** - 利用RxJava的操作符,可以方便地进行任务的串联和并行,提高代码可读性。 5. **取消任务** - 提供了取消任务的...
2. **异常分类**:一旦捕获到异常,该组件可能会对它们进行分类,根据异常类型、严重性或业务上下文进行区分。这有助于决定后续的响应策略。 3. **自定义响应生成**:此组件的核心功能在于生成自定义响应。这可能...
- **异常链**:当一个异常处理过程中抛出了另一个异常,原来的异常信息会被保存在新异常的`cause`属性中,形成异常链,方便追踪问题源头。 - **自定义异常**:可以通过继承`Exception`或其子类创建自定义异常,...
例如,在上述代码中,当字符串“123abc”传递给`Integer.parseInt()`方法时,会抛出NumberFormatException异常,程序通过catch块捕获它,并打印出错误信息。 除了异常捕获外,还可以通过预先检查字符串是否包含有效...
异常堆栈跟踪信息能够提供关于问题发生的上下文,这对于定位问题的源头至关重要。在阅读异常堆栈时,需要关注具体的错误描述和发生错误的代码位置。 其次,需要检查会话管理的代码。这涉及到创建会话、使用会话以及...
重试策略可以在代码中实现为一个循环结构,在这个结构中,如果操作失败,则捕获异常,打印日志,进行适当的延时后再次尝试执行操作,直到成功或达到预设的重试次数上限。需要注意的是,在进行重试操作时,应该处理...
1. **软件开发**:在开发过程中,DebugView可以帮助开发者查看程序内部的调试输出,追踪异常或错误的源头。 2. **系统调试**:对于系统级的问题,如驱动程序的调试,DebugView可以捕获内核模式下的调试信息,提供...
7. **多线程支持**:madExcept能够处理多线程应用中的异常,确保每个线程的异常都能被正确捕获。 **源码学习价值** 拥有madExcept 5的源码意味着你可以深入理解其工作原理,学习如何编写更健壮的异常处理代码。这有...
这涉及到在代码中使用try-except语句来捕获异常。当知道哪些代码块可能会抛出AbortError时,可以在这个代码块外围添加try-except语句。捕获异常后,可以选择重新尝试执行、记录错误日志或其他适当的错误处理措施。 ...
上述代码会在捕获异常时打印出导致异常的完整调用堆栈。 7. **性能考虑**:`StackTrace`类的使用可能会对性能产生一定影响,特别是在高并发或性能敏感的场景下。因此,应谨慎在生产环境中使用,通常只在调试或异常...
对于复杂的调试场景,如崩溃或未捕获的异常,利用“调试器事件”设置在特定事件(如异常)发生时中断,这样可以更好地分析出错时的上下文。 最后,了解并运用调试器的高级特性,如数据筛选、条件断点、命令行调试、...
这个报告不仅包含异常类型、堆栈跟踪,还可能包括内存快照、线程信息、系统配置等,这对于定位问题的源头非常有帮助。开发者可以通过这些信息快速定位到代码中的错误位置,从而缩短了故障排查时间。 EurekaLog 7.7....
使用try-except语句来捕获和处理异常,确保程序在遇到错误时能够优雅地退出,而不是突然崩溃。同时,结合logging模块记录异常信息,可以有效地定位和解决程序运行时的问题。 总的来说,Python开发者需要了解并掌握...