У меня есть приложение, которое запускает тестовый прогон JUnit с некоторыми тестами, которые создают несколько пулов потоков фиксированного размера, не закрывая их потом. Это приводит к тому, что работники пула потоков, от которых мне нужно избавиться. Я не контролирую тестовый код, а только код, запускающий тестовый прогон. Есть ли какой-либо способ (безопасный или небезопасный), который я могу заставить рабочие потоки отключиться?Прерывание пустых работников пула потоков
Мой текущий, нерабочим, попытка решения выглядит следующим образом:
Set<Thread> threads = Thread.getAllStackTraces().keySet();
for (Thread thread: threads) {
if (thread.getName().matches("pool-\\d+-thread-\\d+")) {
thread.interrupt();
}
}
Я хотел бы решение, в котором я все еще могу запустить тесты в одной и той же виртуальной машины Java. Нерест отдельный процесс является последним средством на этом этапе.
Редактировать: У меня нет способа получить ссылку на ExecutorService, которая породила рабочие потоки (они созданы в тестовом коде, который я не контролирую).
Нити должны иметь какую-то политику, чтобы заставить их закрыться. Прерывание! = Обязательно. Лучшее, что нужно сделать, - это найти документы для любых потоков, которые создадут потоки, и посмотреть, что это за политика выключения. вызовите метод уничтожения или выключения. –