java - java.util.concurrent.ScheduledExecutorService:是否可以在启动另一个服务之前等待服务完成?
问题描述
我在 web.xml 中设置了 2 个服务,并为每个服务创建了一个 shedule 服务,如下所示:
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);
countDown()
完成他的工作后,第一个服务将调用。
//service1
public void run(){
doSmthng();
latch.countDown();
}
第二个服务将等到锁存计数器不等于 0。
//service2
public void run(){
latch.await();
doSmthngElse();
}
推荐阅读
- json - Flutter - 例外:类型“int”不是“double”类型的子类型
- node.js - 在 Node 终端/REPL 中复制和粘贴代码的键盘快捷键?
- xamarin.forms - 在 xamarin.Fomrs 中的 Nullable 日期选择器自定义控件中选择当前日期时,不会触发 SelectedDate 事件
- html - CSS Parse 元素之间的 Htmlkit 快速查询
- ios - Flutter:Xcode 中的 firebase_admob 构建失败
- c++ - 我们可以制作一个向量的向量吗?
- svg - 不完整或损坏的 PNG 文件 - 在 React 应用程序中使用 jsPDf 将 svg 标记转换为 pdf
- python - 如何创建一个直方图,其中每个条形图都是相应 bin 的热图?
- javascript - IndexedDB 获取空的多条目索引
- windows-subsystem-for-linux - 多次执行wsl后无法连接到WSL2