As program does not try to catch a RuntimeException, exception floats through JVM level and thread gets killed. This is absolutely normal behavior but it MAY NOT be desired behavior
Without UncaughtExceptionHandler
class Task implements Runnable {
@Override
public void run() {
System.out.println(Integer.parseInt("123"));
System.out.println(Integer.parseInt("234"));
System.out.println(Integer.parseInt("345"));
System.out.println(Integer.parseInt("XYZ")); //This will cause NumberFormatException
System.out.println(Integer.parseInt("456"));
}
}
public class DemoThreadExample {
public static void main(String[] args) {
Task task = new Task();
Thread thread = new Thread(task);
thread.start();
}
}
output123
234
345
Exception in thread”Thread-0” java.lang.NumberFormatException: For input string:“XYZ”
at java.lang.NumberFormatException.forInputString(Unknown Source)
at java.lang.Integer.parseInt(Unknown Source)
at java.lang.Integer.parseInt(Unknown Source)
at examples.algorithms.sleepingbarber.Task.run(DemoThreadExample.java:24)
at java.lang.Thread.run(Unknown Source)
With UncaughtExceptionHandler
class ExceptionHandler implements UncaughtExceptionHandler {
public void uncaughtException(Thread t, Throwable e) {
System.out.printf("An exception has been captured\n");
System.out.printf("Thread: %s\n", t.getId());
System.out.printf("Exception: %s: %s\n", e.getClass().getName(), e.getMessage());
System.out.printf("Stack Trace: \n");
e.printStackTrace(System.out);
System.out.printf("Thread status: %s\n", t.getState());
new Thread(new Task()).start();
}
}
class Task implements Runnable {
@Override
public void run() {
Thread.currentThread().setUncaughtExceptionHandler(new ExceptionHandler());
System.out.println(Integer.parseInt("123"));
System.out.println(Integer.parseInt("234"));
System.out.println(Integer.parseInt("345"));
System.out.println(Integer.parseInt("XYZ")); //This will cause NumberFormatException
System.out.println(Integer.parseInt("456"));
}
}
output
123
234
345
An exception has been captured
Thread:1394
Exception: java.lang.NumberFormatException: For input string:“XYZ”
Stack Trace:
java.lang.NumberFormatException: For input string:“XYZ”
at java.lang.NumberFormatException.forInputString(Unknown Source)
at java.lang.Integer.parseInt(Unknown Source)
at java.lang.Integer.parseInt(Unknown Source)
at examples.algorithms.sleepingbarber.Task.run(DemoThreadExample.java:24)
at java.lang.Thread.run(Unknown Source)
Thread status: RUNNABLE
123
234
345
An exception has been captured
Thread:1395
Exception: java.lang.NumberFormatException: For input string:“XYZ”
Stack Trace:
java.lang.NumberFormatException: For input string:“XYZ”
at java.lang.NumberFormatException.forInputString(Unknown Source)
at java.lang.Integer.parseInt(Unknown Source)
at java.lang.Integer.parseInt(Unknown Source)
at examples.algorithms.sleepingbarber.Task.run(DemoThreadExample.java:24)
at java.lang.Thread.run(Unknown Source)
Thread status: RUNNABLE
123
234
345…