< prev index next >

src/java.base/share/classes/java/util/concurrent/ThreadPoolExecutor.java

Print this page
8221892: ThreadPoolExecutor: Thread.isAlive() is not equivalent to not being startable
Reviewed-by: martin, dholmes

*** 920,936 **** // shut down before lock acquired. int c = ctl.get(); if (isRunning(c) || (runStateLessThan(c, STOP) && firstTask == null)) { ! if (t.isAlive()) // precheck that t is startable throw new IllegalThreadStateException(); workers.add(w); int s = workers.size(); if (s > largestPoolSize) largestPoolSize = s; - workerAdded = true; } } finally { mainLock.unlock(); } if (workerAdded) { --- 920,936 ---- // shut down before lock acquired. int c = ctl.get(); if (isRunning(c) || (runStateLessThan(c, STOP) && firstTask == null)) { ! if (t.getState() != Thread.State.NEW) throw new IllegalThreadStateException(); workers.add(w); + workerAdded = true; int s = workers.size(); if (s > largestPoolSize) largestPoolSize = s; } } finally { mainLock.unlock(); } if (workerAdded) {
< prev index next >