在Junit测试类中测试ScheduledExecutorService定时任务时程序会直接正常结束,在main函数中却可以正常运行。原因是当开启新线程后,junit在主线程运行后会关闭,子线程也就无法运行了。
定时任务代码:
public static void eventControl(){
Runnable runnable = new Runnable() {
@Override
public void run() {
System.out.println("定时任务执行中....");
}
};
ScheduledExecutorService service = Executors
.newSingleThreadScheduledExecutor();
service.scheduleAtFixedRate(runnable, 1, 5, TimeUnit.SECONDS);
}
运行结果:
解决方法:
测试时先执行定时任务方法,之后让主线程休眠。
public class EventServicesTest {
@Test
public void test() throws InterruptedException {
//定时任务方法
EventServices.eventControl();
//主线程休眠
Thread.sleep(100000);
}
}
运行结果: