首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用关闭钩子优雅地停止Guava AbstractScheduledService?

如何使用关闭钩子优雅地停止Guava AbstractScheduledService?
EN

Stack Overflow用户
提问于 2012-08-31 06:06:53
回答 1查看 2.9K关注 0票数 4

我使用的是带有调度程序的AbstractScheduledService。一个简单的模式,如:

代码语言:javascript
复制
class MyService extends AbstractScheduledService {

   // KEEP THIS VAR IN MIND W.R.T the SHUTDOWN_HOOK BELOW
   public static volatile boolean keepRunning = true;

   protected void startUp() throws Exception {
     // startup stuff
   }

   protected void runOneIteration() throws Exception {
     // main logic stuff
   }

   protected void shutDown() throws Exception {
     // shutdown stuff
   }

   protected Scheduler scheduler() {
     return Scheduler.newFixedRateSchedule(0, 1, TimeUnit.SECONDS);
   }
 }

现在,我想实现一个典型的关闭钩子,如下所示:(下面的代码片段将在main方法中)

代码语言:javascript
复制
final Thread mainThread = Thread.currentThread();
        LOGGER.debug("Adding the shutdown hook");
        Runtime.getRuntime().addShutdownHook(new Thread() {
            @Override
            public void run() {
                keepRunning = false;
                LOGGER.debug("The shutdown hook was engaged. Setting keepRunnning to false.");
                try {
                     // Is this appropriate?
                     mainThread.join();
                } catch (InterruptedException e) {
                    // handle exception here
                }
            }
        });

shutdown钩子来自典型的文档示例。它似乎不能很好地与Guava服务模式一起工作,因为服务本身运行在不同的线程上。

我的服务在runOneIteration()逻辑中有一个轮询循环。我希望它完成手头的当前任务,然后当is看到keepRunning现在是false时,优雅地关闭它,因为关闭钩子在最近的过去某段时间被占用,当时它正忙于当前的迭代。

有什么想法可以优雅地做到这一点(完成当前迭代,然后关闭)?

EN

回答 1

Stack Overflow用户

发布于 2012-08-31 21:13:57

难道你不会直接调用stopAndWait()吗?

代码语言:javascript
复制
Runtime.getRuntime().addShutdownHook(new Thread() {
        @Override
        public void run() {
            service.stopAsync().awaitTerminated(60, TimeUnit.SECONDS);
        }
});
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12206248

复制
相关文章

相似问题

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