【发布时间】:2013-11-26 10:16:36
【问题描述】:
考虑这个测试类,如果你运行 main 方法,该过程将在 5 分钟内不会完成,如果你运行测试它会立即成功。是否有任何推荐的方法来验证 Executor 行为?我预计测试也不会在 5 分钟内完成。
我遇到的具体问题是通过Executors.html#newScheduledThreadPool(int)创建一个ScheduledExecutorService,安排一个未来然后取消该未来不会终止底层Executor,因为默认RemoveOnCancelPolicy是等待取消的未来在终止之前安排。我正在通过公开正在使用的ScheduledThreadPoolExecutor 来解决这个问题,但我更愿意将其封装在我的实现中。
public class TestExecutor {
@Test public void executorThatIsNotShutdown() {
main(null);
}
public static void main(final String[] args) {
final ScheduledExecutorService ex = Executors.newScheduledThreadPool(1);
ex.schedule(new Runnable() {
@Override
public void run() {
}
}, 5, TimeUnit.MINUTES);
ex.shutdown();
System.out.println(ex.toString());
}
}
【问题讨论】:
标签: java multithreading junit