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