< 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 >