Beware of ExecutorService, using .submit(Runnable) won't call the UncaughtExceptionHandler. For the TCP ConnectionPool thread I wrap a Callable into a Runnable where the callable.call is done in a try-catch.
It should be checked that all threads have decent exception handling so not a single exception is swallowed.