当前位置: 首页 > 知识库问答 >
问题:

何时关闭SchduledExecutorService?

蔚元明
2023-03-14

我有一个单身汉需要开始执行计划。以下是代码:

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());
            }
        }
    }

我不确定何时或是否应该调用执行器的关机方法。我使用的是JEE5,所以我不确定仅仅取消部署应用程序是否会自动执行关机,或者我是否在浪费大量时间,创建大量线程,并且没有杀死它们。

-编辑-

我会再补充一些信息,以防万一。

整个应用程序是一个RESTful web应用程序,使用Jersey作为ServletContainer。

共有1个答案

诸修伟
2023-03-14

你说的是JEE5?你为什么要重新发明轮子

只需使用@附表@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进行实现。我在这里写了一些这样的答案,这是同样的想法,它确实适用于这里。

 类似资料:
  • 问题内容: 我的应用程序需要执行以下操作: 打开一个,并获取基础(通过) 根据以上内容创建新对象 到目前为止,我只需要一个,所以我过去通过调用原始流(即,我调用的流)来关闭它。我之所以使用它,是因为某些Android API方法具有此类参数。 现在我将同时拥有更多对象,什么时候关闭?(我的猜测:何时所有对象都关闭了?) 问题答案: 我相信你是对的。小型测试表明,在关闭后,该变得无效。请注意,如果有

  • 我不想更改端口号,但收到异常“exception in thread”main“java.net.BindException:Address already in use:JVM_Bind” ServerSocket服务器=新服务器套接字(1234180);

  • 问题内容: 我想知道如果不手动关闭流,何时关闭。我的意思是,如果引用的范围不再存在,流将被关闭吗? 请考虑以下示例方案。 在这里,一旦完成流处理,我将退出,但是反过来将继续执行该程序的程序不会终止,而是继续进行其他操作。 我没有关闭溪流。一旦对A类的引用范围结束,它会自动关闭吗?(即何时结束)?GC会照顾吗?另外,我读到,一旦流程结束,流将关闭,并且系统释放为其他进程保留的所有资源。我们如何检查流

  • 我正在尝试用PDFBOX填充重复的表单。我正在使用树状图并用单个记录填充表单。pdf表格的格式是在第一页列出六个记录,在第二页插入一个静态页。(对于大于6条记录的树映射,该过程重复)。Im获得的错误与TreeMap的大小有关。这就是我的问题所在。我不明白为什么当我用35个以上的条目填充TreeMap时,我会得到以下警告: 2018年4月23日2:36:25 AM org.apache.pdfbox

  • 问题内容: 在Swing中,您可以简单地用于在关闭窗口时关闭整个应用程序。 但是,在JavaFX中找不到等效项。我有多个打开的窗口,如果一个窗口关闭,我想关闭整个应用程序。用JavaFX做到这一点的方法是什么? 编辑: 我了解可以覆盖以在窗口关闭时执行一些操作。问题是应该执行什么操作才能终止整个应用程序? 类中定义的方法不执行任何操作。 问题答案: 当最后一个关闭时,应用程序自动停止。目前,您的类

  • 问题内容: 我一直在对我们的一个宠物项目进行代码审查(通常使用诸如FindBugs之类的工具),并且FindBugs将以下代码标记为错误的(伪代码): 错误是此代码可能不会释放资源。我发现ResultSet和Statement没有关闭,所以我最终将它们关闭: 但是我在许多项目(来自许多公司)中遇到了上述模式,没有人关闭ResultSets或Statements。 关闭连接时,是否关闭了Result