[FIX] Fix IllegalThreadStateException in ComponentStarter shutdown hook (#4733)

The UncaughtExceptionHandler in ComponentStarter calls
shutdownHookThread.start(), but this can throw IllegalThreadStateException
if the thread was already started by a prior exception or by the JVM
shutdown sequence. This exception propagates out of the handler, causing
the JVM to print "Exception thrown from the UncaughtExceptionHandler"
on the BookieDeathWatcher thread.

Catch IllegalThreadStateException since it simply means shutdown is
already in progress.
diff --git a/bookkeeper-common/src/main/java/org/apache/bookkeeper/common/component/ComponentStarter.java b/bookkeeper-common/src/main/java/org/apache/bookkeeper/common/component/ComponentStarter.java
index d1cb081..b8dfced 100644
--- a/bookkeeper-common/src/main/java/org/apache/bookkeeper/common/component/ComponentStarter.java
+++ b/bookkeeper-common/src/main/java/org/apache/bookkeeper/common/component/ComponentStarter.java
@@ -76,7 +76,12 @@
                     component.getName(), t, e);
             System.err.println(e.getMessage());
             // start the shutdown hook when an uncaught exception happen in the lifecycle component.
-            shutdownHookThread.start();
+            try {
+                shutdownHookThread.start();
+            } catch (IllegalThreadStateException ise) {
+                // the shutdown hook thread is already running (e.g. triggered by a prior
+                // exception or by the JVM shutdown sequence), so there is nothing else to do.
+            }
         });
 
         component.publishInfo(new ComponentInfoPublisher());