如果在启动程序后没有任何输出,可能是因为 ScheduledExecutorService
的线程没有被保持活跃,或者主线程在执行完后直接退出。你可以通过以下方法确保程序持续运行并能够看到输出。
方法1:让主线程休眠
在主方法中添加一个持续运行的机制,比如让主线程休眠一段时间或使用 CountDownLatch
等来保持应用存活。示例代码如下:
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
public class ScheduledTask {
public static void main(String[] args) {
ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);
Runnable task = () -> {
// 调用你的接口逻辑,例如使用HttpClient等发送请求。
System.out.println("Calling API... " + System.currentTimeMillis());
};
// 每隔5秒执行一次
scheduler.scheduleAtFixedRate(task, 0, 5, TimeUnit.SECONDS);
// 保持主线程活着,以便调度器可以继续工作
try {
Thread.sleep(30000); // 主线程睡眠30秒
} catch (InterruptedException e) {
e.printStackTrace();
}
// 关闭调度器
scheduler.shutdown();
}
}
方法2:使用 CountDownLatch
另外一种方式是利用 CountDownLatch
来使得主线程等待直到某个条件满足,比如任务完成:
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
public class ScheduledTask {
public static void main(String[] args) throws InterruptedException {
ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);
Runnable task = () -> {
System.out.println("Calling API... " + System.currentTimeMillis());
};
// 每隔5秒执行一次
scheduler.scheduleAtFixedRate(task, 0, 5, TimeUnit.SECONDS);
CountDownLatch latch = new CountDownLatch(1);
// 等待用户按下回车键,然后关闭调度器
System.out.println("Press ENTER to stop...");
System.in.read();
latch.countDown(); // Count down the latch
scheduler.shutdown(); // Shut down the scheduler
}
}
总结
无论你选择哪种方式,都能保证程序不会立即退出,从而使得调度任务能够按预期定时执行。在这两种情况下,你应该会每隔5秒看到输出“Calling API…”及当前时间戳。
内容由零声教学AI助手提供,问题来源于学员提问