我正在尝试在Java编写守护程序服务作业。该服务每分钟都会运行。
,但是我无法使用执行人员服务来实现这一点,我不知道这是正确的方法。以下是我的代码段:
public void startService() {
try {
ExecutorService service = Executors.newFixedThreadPool(3);
for (;;) {
service.submit(new Service1()); // this will send some set of emails
service.submit(new Service2()); // this will send some set of emails
service.submit(new Service3()); // this will send some set of sms
}
service.shutdown(); // It says Unreachable code so when should i shutdown the service
service.awaitTermination(1, TimeUnit.MINUTES);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
首先,您需要查看ScheduleDexeCutorService及其实现。此服务使您可以安排工作以预定义的频率运行。这是简短的答案。至于实施细节,有太多未知数为您提供实用建议。您是否希望您的程序在容器(Web或Application Server)或带有域线程的独立元中运行?您是在UNIX/Linux上运行(因此可以使用CRON作业调度程序)还是Windows?调度程序选项之一可以是石英安排。我希望这会有所帮助。
您的 for
循环没有结束条件: for(;;)
,而没有break语句。
因此,所有代码此循环是如果课程无法实现。
您必须在循环中等待1分钟,而不是在内(因为循环后的代码永远不会运行)。
保持您的合成,我想应该是:
for (;;) {
service.submit(new Service1()); // this will send some set of emails
service.submit(new Service2()); // this will send some set of emails
service.submit(new Service3()); // this will send some set of sms
service.shutdown();
service.awaitTermination(1, TimeUnit.MINUTES);
}
此处:
for (;;) {
service.submit(new Service1()); // this will send some set of emails
service.submit(new Service2()); // this will send some set of emails
service.submit(new Service3()); // this will send some set of sms
}
是一个无限环路;它不断地向您的ThreadPool提交新工作。不是一次每分钟,而是一次每次迭代。您必须慢向下循环!
我不确定您的要求,但是您应该简单地删除该循环构造;或更有可能做类似的事情:
while (true) {
service.submit(new Service1()); // this will send some set of emails
service.submit(new Service2()); // this will send some set of emails
service.submit(new Service3()); // this will send some set of sms
Thread.sleep( 1 minute );
}
或类似的东西。