UncaughtExceptionHandler接口用来捕获运行时未被程序捕获异常.
如下面的例子.
for (int i=5;i >=0 ;i--) {
int value = 5 / i;
System.out.println(value);
}
直接在main方法里执行,在console里是不会报错的.
但仔细看一下代码会发现,当i为0时此处代码应该抛ArithmeticException.为何没有,是因为程序中没有任何异常catch.
如果在main方法中加入
Thread.setDefaultUncaughtExceptionHandler(new UncaughtExceptionHandler() {
public void uncaughtException(Thread t, Throwable e) {
e.printStackTrace();
}} );
再执行会发现console会出现
Exception in thread "main" java.lang.ArithmeticException: / by zero 信息.
在有线程的情况下。对于主线程是无法捕获Thread的异常的。
static class Task implements Runnable {
@Override
public void run() {
for (int i=5;i >=0 ;i--) {
int value = 5 / i;
System.out.println(value);
}
}
}
try {
Thread unCaughtableThread = new Thread(new Task());
unCaughtableThread.start();
} catch (Exception e) {
System.out.print("can do somthing");//无法执行
e.printStackTrace();
}
如果修改一下
try {
Thread caughtableThread = new Thread(new Task());
caughtableThread.setUncaughtExceptionHandler(new SimpleUncaughtExceptionHandler());
caughtableThread.start();
} catch (Exception e) {
System.out.print("can do somthing");//依然不会出执行
e.printStackTrace();
}
static class SimpleUncaughtExceptionHandler implements UncaughtExceptionHandler {
@Override
public void uncaughtException(Thread t, Throwable e) {
System.err.println(t.getName() + " " +e.getMessage());//这里会捕获异常。
e.printStackTrace();
}
}
分享到:
相关推荐
Java中的`UncaughtExceptionHandler`是Java异常处理机制的一部分,它允许程序员自定义当线程遇到未捕获异常时的行为。这个接口提供了处理未捕获异常的能力,这些异常通常是在线程执行过程中抛出且没有被该线程内部的...
要注册自定义的 `UncaughtExceptionHandler`,你需要创建一个实现 `Thread.UncaughtExceptionHandler` 接口的类,并重写 `uncaughtException()` 方法。然后,在应用程序的主线程上设置这个处理器: ```java public ...
`java.lang.Thread.UncaughtExceptionHandler`是Java提供的一个接口,它的主要任务是处理线程中未被捕获的异常。如果一个线程在执行过程中遇到了未处理的异常,并且该线程没有设置`UncaughtExceptionHandler`,那么...
Android 应用不可避免的会发生crash 即崩溃,无论程序写的多好...java的Thread中有一个UncaughtExceptionHandler接口,该接口的作用主要是为 了 当 Thread 因未捕获的异常而突然终止时,调用处理程序。 崩溃信息捕获,
在这里,`RestartServerTask`是你自定义的任务类,需要实现`Runnable`接口。 隐藏黑窗口(DOS窗口)通常是指在Windows环境下运行Java程序时不显示命令行窗口。这可以通过修改Java启动参数来实现,添加"-windowed...
Java的Thread.UncaughtExceptionHandler接口可以用来设置未捕获异常的处理器,确保线程在出现异常时能正确关闭,而不影响其他线程。 5. **线程池**:为了更好地管理和优化线程,Java提供了ExecutorService和...
Java线程可以通过继承`java.lang.Thread`类或实现`Runnable`接口来创建。 ##### 创建线程 1. **继承Thread类** - 创建`Thread`类的子类并重写`run()`方法。 - 实例化子类对象,并调用`start()`方法启动线程。 ...
通过实现Thread.UncaughtExceptionHandler接口并设置到线程中,可以自定义异常处理逻辑。 线程与任务的区别在于线程是操作系统的最小调度单元,而任务是指需要执行的工作内容。在Java中,可以通过Runnable或...
Java提供了两种创建线程的方式:继承Thread类或实现Runnable接口。在这个电风扇程序中,很可能开发者选择实现了Runnable接口,因为这种方式更灵活,可以避免单继承的限制。 电风扇模拟可能涉及以下关键概念: 1. *...
Java的`try-catch-finally`结构和`Thread.UncaughtExceptionHandler`接口可以用于捕获和处理线程中的异常。 总之,"Java时序银行系统"是一个很好的学习多线程编程的案例。通过分析和实践这个项目,开发者可以深入...
另一方面,`DownLoadUtil.java`可能实现了`Runnable`接口,提供了一个`run()`方法来执行下载任务。这种情况下,我们通常会使用`ExecutorService`或`ThreadPoolExecutor`来管理和调度线程,而不是直接创建`Thread`...
Java提供了try-catch-finally结构和Thread.UncaughtExceptionHandler接口来捕获和处理线程中的异常,确保程序的健壮性。 7. **线程安全的数据结构**:Java集合框架提供了线程安全的实现,如Vector、...
6. **线程异常处理**:学习如何在多线程环境中捕获和处理异常,以及`Thread.UncaughtExceptionHandler`接口的使用。 7. **线程池**:深入理解`ThreadPoolExecutor`的工作原理,如何配置线程池参数,以及如何优化...
我们可以使用`uncaughtExceptionHandler`来处理线程中抛出的未捕获异常。 总的来说,"JAVA线程学习(源代码)"涵盖了Java线程的基础知识和高级特性,包括线程的创建、管理、同步和通信。通过分析和实践这些源代码,你...
`Thread.UncaughtExceptionHandler`接口可以用于定义线程未捕获异常的处理方式,确保程序在出现异常时能优雅地结束。 6. **线程中断**:通过`Thread.interrupt()`方法可以请求线程中断,但实际中断行为取决于被中断...
`UncaughtExceptionHandler`是Java中的一个接口,用于处理线程未捕获的异常。在Android中,每个线程都有一个默认的`UncaughtExceptionHandler`,当线程抛出未被处理的异常时,这个处理器会被调用。通过覆盖`uncaught...
Java提供了try-catch-finally结构,以及Thread.UncaughtExceptionHandler接口,用于捕获和处理线程中的未捕获异常。 9. **死锁检测与预防**:死锁是指两个或多个线程互相等待对方释放资源,导致无法继续执行的情况...
Java中的线程有两种创建方式:通过实现Runnable接口或者继承Thread类。实现Runnable接口更为灵活,因为它可以被多个线程共享,避免了单继承的限制。 其次,线程的生命周期包括新建、可运行、运行、阻塞和死亡五个...
在Java中,线程的错误处理通常依赖于`Thread.UncaughtExceptionHandler`接口。这个接口定义了一个方法`uncaughtException(Thread t, Throwable e)`,当线程因未捕获的异常而终止时,系统会调用此方法。CheckThread...
首先,Java线程的错误捕获主要依赖于`try-catch-finally`语句块和`Thread.UncaughtExceptionHandler`接口。在多线程环境下,当一个线程抛出未捕获的异常时,如果没有设置特定的处理机制,这个异常会终止线程的执行,...