何时关闭ScheduledExecutorService?

时间:2015-06-24 20:41:42

标签: java threadpool scheduledexecutorservice

我有一个需要开始计划执行的单身人士。这是代码:

public enum Service{
    INSTANCE; 

    private Service() {
        startAutomaticUpdate();
    }

    private void startAutomaticUpdate() {
        try {
            ScheduledExecutorService executor = Executors.newScheduledThreadPool(1);
            executor.scheduleAtFixedRate(new AutomaticUpdate(), 0, 15, TimeUnit.MINUTES);
        } catch (Exception e) {
            LOG.error(e.getMessage() + "Automatic update not working: ");
        }
    }

    //Makes a call to a webservice that updates a static variable. 
    private void getTemplateNames(){...}

    private class AutomaticUpdate implements Runnable {

        public AutomaticUpdate()  {           
        }

        @Override
        public void run(){
            try{
                getTemplateNames();
            }catch(Exception e){
                LOG.error("Error in automatic update: "+e.getMessage());
            }
        }
    }

我不确定何时或是否应该调用执行程序的shutdown方法。我使用的是JEE5,所以我不确定是否只是取消部署应用程序会自动执行关机,或者如果我搞乱大量时间并创建一个荒谬的线程而不是杀死它们。

- 编辑 -

为了以防万一,我会添加更多信息。

整个应用程序是使用Jersey作为ServletContainer的RESTful Web应用程序。

1 个答案:

答案 0 :(得分:1)

你说JEE5?你为什么要重新开车呢?

只需使用@Schedule@Startup

创建一个EJB
@Singleton
@Startup
public class TaskSingleton {

  @Schedule(second = "0", minute = "*/15", hour = "*")//This mean each 15:00 minutes
  public void getTemplateNames() {
    // YOUR TASK IMPLEMENTATION HERE
  }
}

不,你不是指JEE5投诉服务器。 :(

使用ServletContextListener进行实现。我写了一些像here这样的答案,这是相同的想法,它确实适用于此。