我有一个应用程序启动JUnit测试运行,其中一些测试会创建一些固定大小的线程池而不会在之后关闭它们。这留下了我需要摆脱的空闲线程池工作者。我无法控制测试代码,只有开始测试运行的代码。是否有任何方法(安全或不安全)我可以强制工作线程关闭?
我目前的非工作解决方案尝试如下:
Set<Thread> threads = Thread.getAllStackTraces().keySet();
for (Thread thread: threads) {
if (thread.getName().matches("pool-\\d+-thread-\\d+")) {
thread.interrupt();
}
}
我想要一个解决方案,我仍然可以在同一个JVM中运行测试。在这一点上产生一个单独的过程是最后的手段。
编辑:我没有办法获得对产生工作线程的ExecutorService的引用(它们是在我无法控制的测试代码中创建的)。
答案 0 :(得分:0)
如果您使用ExecutorService
启动主题,则可以使用shutdownNow
后跟awaitTermination
。链接的javadoc包含有序关闭的示例代码。