--- old/src/java.base/share/classes/java/util/concurrent/ThreadPoolExecutor.java 2019-05-02 06:15:14.698429337 -0700 +++ new/src/java.base/share/classes/java/util/concurrent/ThreadPoolExecutor.java 2019-05-02 06:15:14.422429323 -0700 @@ -922,13 +922,13 @@ if (isRunning(c) || (runStateLessThan(c, STOP) && firstTask == null)) { - if (t.isAlive()) // precheck that t is startable + if (t.getState() != Thread.State.NEW) throw new IllegalThreadStateException(); workers.add(w); + workerAdded = true; int s = workers.size(); if (s > largestPoolSize) largestPoolSize = s; - workerAdded = true; } } finally { mainLock.unlock();