Missing timeout check on ExecutorService.awaitTermination

Info
If 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
Tags
  • maintainability
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);
    }
}