executor.shutdown () с awaitTermination (timeout) не убивает потоки. (т.е.), если ваша работоспособная задача находится внутри цикла опроса, она не убивает задачу. Все, что он делает, это прерывает его работоспособные задачи, когда время ожидания истекло. Таким образом, в коде вашего исполняемого класса, если вы ожидаете какое-то условие, вы можете изменить условие на
while (flagcondition && !Thread.currentThread().isInterrupted()) {}
Это гарантирует, что задача останавливается, когда поток прерывается, когда завершается цикл while. Кроме того, вы можете перехватить прерванное исключение и установить
flag = false в блоке catch для завершения потока.
try {
// do some stuff and perform a wait that might throw an InterruptedException
} catch (InterruptedException e) {
flagcondition = false;
}
Вы также можете использовать профилировщик, чтобы проверить, почему некоторые потоки не завершены.