Java执行人员服务无限循环工作



我正在尝试在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 );
}

或类似的东西。

相关内容

  • 没有找到相关文章

最新更新