Missing timeout check on ExecutorService.awaitTermination
InfoIf a timeout check on awaitTermination is missing, a subsequent shutdown operation might forcefully terminate an executing thread. This can make your code harder to debug.
Detector ID
java/missing-timeout-check-on-awaittermination@v1.0
Category
Code Quality
Common Weakness Enumeration (CWE)
Noncompliant example
public void shutdownNonCompliant(ExecutorService executor) {
executor.shutdown();
try {
// Noncompliant: awaitTermination might silently time out before all threads finish their execution.
executor.awaitTermination(10, TimeUnit.SECONDS);
} catch (InterruptedException e) {
log.warn("Failed to wait for all tasks to finish", e);
}
}
Compliant example
public void shutdownCompliant(ExecutorService executor) {
executor.shutdown();
try {
// Compliant: code handles the case when awaitTermination times out.
if (!executor.awaitTermination(10, TimeUnit.SECONDS)) {
log.warn("Failed to terminate executor");
}
} catch (InterruptedException e) {
log.warn("Failed to wait for all tasks to finish", e);
}
}