【发布时间】:2017-02-27 10:31:27
【问题描述】:
我正在尝试每分钟执行一个电子邮件作业。 Job 有 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,我无法编写代码来并行执行服务,也无法每分钟都运行该作业。
上面是我的代码 sn-p。请帮我解决它。
【问题讨论】:
-
他们没有使用 ScheduledExecutorService 定期运行。
标签: java executorservice scheduledexecutorservice