When the main thread in a single-threaded application throws an uncaught exception, you are likely to notice because the stack trace is printed on the console (and because the program stops). But in a multithreaded application, especially one that runs as a server and is not attached to a console, thread death may be a less noticeable event, resulting in partial system failures that can cause confusing application behavior.

If we found a thread is dying due to an uncaught exception, the answer is simple: catch the exception at an appropriate place so that you can keep going. For example,

class SaferPoolWorker extends Thread {
    public void run() {
        IncomingResponse ir;

        while (true) {
            ir = (IncomingResponse) queue.getNext();
            PlugIn plugIn = findPlugIn(ir.getResponseId());
            if (plugIn != null) {
                try {
                    plugIn.handleMessage(ir.getResponse());
                }
                catch (RuntimeException e) {
                    // log the exception and move on
                }
            }
            else
                log("Unknown plug-in for response " + ir.getResponseId());
        }
    }
}

OK, the thread dies, and your object is gone? No! You said.
The robust multiple thread should Objects do not depend upon particular threads. If a thread should fail, the thread is recreated, and the object continues to run.”
Well, you know Thread can’t be restarted, so we need to recreate a Thread to load current object on it. Here is the example, The taming of the thread.

Reference
1. Hey, where’d my thread go?
2. Thread pools and work queues
3. Java while loop and Threads!
4. How to restart thread in java?
5. Java: How to stop a thread?

Advertisements