java.util.concurrent.ScheduledExecutorService:是否可以在启动另一个服务之前等待服务完成?
我在web.xml中设置了2个服务,并为每个服务创建了一个调度服务,如下所示:java.util.concurrent.ScheduledExecutorService:是否可以在启动另一个服务之前等待服务完成?,java,timer,scheduledexecutorservice,Java,Timer,Scheduledexecutorservice,我在web.xml中设置了2个服务,并为每个服务创建了一个调度服务,如下所示: public class MyScheduler implements ServletContextListener { private ScheduledExecutorService scheduledExecutorService = null; @Override public void contextInitialized(ServletContextEvent sce) {
public class MyScheduler implements ServletContextListener {
private ScheduledExecutorService scheduledExecutorService = null;
@Override
public void contextInitialized(ServletContextEvent sce) {
if ((scheduledExecutorService == null) || (!scheduledExecutorService.isTerminated())) {
scheduledExecutorService = Executors.newSingleThreadScheduledExecutor();
scheduledExecutorService.scheduleAtFixedRate(new MyScheduledTimer(), 0, 15, TimeUnit.DAYS);
}
}
@Override
public void contextDestroyed(ServletContextEvent sce) {
try {
scheduledExecutorService.shutdown();
} catch (Exception ex) {
}
}
}
class MyScheduledTimer extends TimerTask {
{
try {
MyEjb ejbObject = (InterfaceEjb) new InitialContext().lookup("java:global/project/MyEjb");
} catch (NamingException ex) {
Logger.getLogger(MyScheduler.class.getName()).log(Level.SEVERE, null, ex);
} catch (Exception ex) {
Logger.getLogger(MyScheduler.class.getName()).log(Level.SEVERE, null, ex);
}
}
@Override
public void run() {
//my code to run with ejbObject...
}
}
我想运行第一个服务来启动我的应用程序,等待此服务完成,然后运行第二个服务。有可能吗?如果您想使用更具体的东西,您可以使用CountDownLatch,例如。创造
CountDownLatch latch = new CoundownLatch(1);
第一个服务将在完成其工作时调用倒计时()
//service1
public void run(){
doSmthng();
latch.countDown();
}
第二个服务将等待,直到闩锁计数器不等于0
//service2
public void run(){
latch.await();
doSmthngElse();
}
是的,你能做到。保留布尔标志,如果第一次服务完成,则返回true。然后在调用run方法中的第二个服务之前检查该标志。好的,我已经考虑过这个解决方案,但是我相信ScheduledExecutorService类有一些特性允许这样做。谢谢