首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java ScheduledExecutorService标准实践

Java ScheduledExecutorService标准实践
EN

Stack Overflow用户
提问于 2014-05-12 13:51:40
回答 2查看 504关注 0票数 0

我正在使用ScheduledExecutorService在一个J2EE应用程序中调度一个任务,每x秒从一个配置文件(从数据库中获取数据并发送到外部服务器)。我的代码是:

代码语言:javascript
复制
try{
    final ScheduledExecutorService service = Executors.newSingleThreadScheduledExecutor();
    service.scheduleWithFixedDelay(new Runnable(){
    public void run(){
                RsaBaseAction rsa = RsaBaseAction.getInstance();//class that does all the work
                rsa.rsaBaseAction();
            }
          }, 0, timeInterval, TimeUnit.SECONDS);
     }
     catch(Exception ex){
         ex.printStackTrace();
     }

我的问题是我应该写什么额外的代码吗?我应该编写一个while循环来确保线程已经完成,然后执行一个service.shutdown(),还是由ScheduledExecutorService来处理呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-05-12 14:01:06

如果希望调度程序停止调度事件,可以调用shutdown。您不需要显式地这样做,就好像您希望它在应用程序的生命周期中运行一样。如果由于某种原因,调度不再有意义,您将使用shutdown方法。

举个例子。您正在编写一个CMS,它提供与谷歌购物的集成,以上传产品信息。如果用户删除他们的上传信息(即关闭它),您可以调用关机来停止服务进行同步。

票数 0
EN

Stack Overflow用户

发布于 2014-05-12 14:13:45

正如shutdown方法上的Javadoc明确指出的那样:

启动有序关机,执行以前提交的任务,但不接受任何新任务。如果已经关闭,则调用没有其他效果。此方法不等待以前提交的任务完成执行。使用awaitTermination来完成这个任务。

也就是说,以前的任务将要完成,没有新的任务要完成,但是如果需要一段时间,以前的任务可能会继续通过shutdown命令。

至于您所拥有的代码,我看不出有什么理由使用try-catch块。调度任务不会引发任何异常。看起来您想要实际地尝试-捕获rsaBaseAction而不是调度(如果runnable抛出了一个异常,则不再调度执行,该异常由线程组异常处理程序处理)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23610915

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档