【发布时间】:2015-03-10 14:58:47
【问题描述】:
我有一个应用程序启动 JUnit 测试运行,其中一些测试创建了一些固定大小的线程池,之后不会关闭它们。这留下了我需要摆脱的空闲线程池工作人员。我无法控制测试代码,只有启动测试运行的代码。有什么方法可以强制关闭工作线程(安全或不安全)?
我当前的无效解决方案尝试如下所示:
Set<Thread> threads = Thread.getAllStackTraces().keySet();
for (Thread thread: threads) {
if (thread.getName().matches("pool-\\d+-thread-\\d+")) {
thread.interrupt();
}
}
我想要一个我仍然可以在同一个 JVM 中运行测试的解决方案。在这一点上,生成一个单独的进程是最后的手段。
编辑:我无法获得对产生工作线程的 ExecutorService 的引用(它们是在我无法控制的测试代码中创建的)。
【问题讨论】:
-
线程需要有某种策略才能让它们关闭。中断!= 必须关闭。最好的办法是在文档中搜索创建线程的任何内容,并查看其关闭策略是什么,例如调用销毁或关闭方法。
标签: java multithreading interrupt