Search code examples
javamultithreadingscalathreadpoolexecutioncontext

Are dead threads replaced in an ExecutionContext and/or Java thread pool?


When a thread dies due to an exception, what happens to this thread? If it is inside a thread pool, does it spawn a new thread? I'm interested in what happens in scala ExecutionContext, but since an ExecutionContext wraps a java thread pool, I think that Java users will also know the answer.

For example, if I create an ExecutionContext wrapping a FixedThreadPool(100), if one thread dies, does he thread pool replace the thread?


Solution

  • The thread itself cannot spawn a new thread after it dies, however the thread pool can replace it. For example, the thread pool created by Executors.newFixedThreadPool() replaces dead threads when needed. From the documentation for Executors.newFixedThreadPool():

    "If any thread terminates due to a failure during execution prior to shutdown, a new one will take its place if needed to execute subsequent tasks."