gpt4 book ai didi

java - 如何使用 ScheduledExecutorService 通过多个服务定期运行作业

转载 作者:行者123 更新时间:2023-12-02 03:00:04 25 4
gpt4 key购买 nike

我试图每分钟执行一封电子邮件作业。工作有 5 项服务。每 5 个服务应并行运行。

使用ExecutorService:

ExecutorService service = null;
if (serviceMap != null && serviceMap.size() > 0) {

for (;;) {
service = Executors.newFixedThreadPool(serviceMap.size()); // Here Service Map size will be 5
for (Map.Entry entry : serviceMap.entrySet()) {
service.submit(new EmailService(conn, mailParam));
}
service.shutdown();
service.awaitTermination(1, TimeUnit.MINUTES);
}
}

使用 ScheduledExecutorService :

ScheduledExecutorService scheduledExecutorService = null;
if (serviceMap != null && serviceMap.size() > 0) {
scheduledExecutorService = Executors.newFixedThreadPool(serviceMap.size()); // Here Service Map size will be 5
for (Map.Entry entry : serviceMap.entrySet()) {

ScheduledFuture scheduledFuture =
scheduledExecutorService.schedule(new EmailService(conn, mailParam),
60,
TimeUnit.SECONDS);
System.out.println("result = " + scheduledFuture.get());
}

scheduledExecutorService.shutdown();
}

如果我使用 ExecutorService,我会每隔一分钟关闭服务并再次执行该服务。还好吗?

如果我使用 ScheduledExecutorService,我无法编写代码来并行执行服务,也无法每分钟运行该作业。

上面是我的代码片段。请帮我解决这个问题。

最佳答案

首先,您应该调用 newScheduledThreadPool() 来创建 ScheduledExecutorService,这是正确的调度执行器服务。
那么您应该使用 [scheduleAtFixedRate][1] 方法每分钟安排一个任务,初始延迟 60 秒。

ScheduledExecutorService scheduledExecutorService = null;
if (serviceMap != null && serviceMap.size() > 0) {
scheduledExecutorService = Executors.newScheduledThreadPool(serviceMap.size()); // Here Service Map size will be 5
for (Map.Entry entry : serviceMap.entrySet()) {
scheduledExecutorService.scheduleAtFixedRate(new EmailService(conn, mailParam),
60,
60,
TimeUnit.SECONDS);
}
}

关于java - 如何使用 ScheduledExecutorService 通过多个服务定期运行作业,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42483416/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com