Java-如何正确地停止ScheduledExecutorService

问题描述:

假设在实时下面的代码使用ScheduledExecutorService每分钟运行一次。Java-如何正确地停止ScheduledExecutorService

该作业由startBatch.sh文件触发。

public class TestScheduledExecutorService { 
    public static void main (String a[]) { 
     ScheduledExecutorService service = null; 
     try { 
      TestObject runnableBatch = new TestObject() { 
       int i = 0; 
       @Override 
       public void run() { 
        testMethod (++i); 
       } 
      }; 
      service = Executors.newSingleThreadScheduledExecutor(); 
      service.scheduleAtFixedRate(runnableBatch, 0, 20, TimeUnit.SECONDS); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 
} 

如何在出现任何问题后正确停止此守护进程?

您必须考虑添加一种方法,您可以通过“某种方式”来通知服务停止。例如,您的“服务”可能在某个端口上侦听并从那里接收命令。

是的,这是相当广泛的,但你的输入问题也是如此。

给出您的评论:听命令只有一个选项在这里。这真的取决于你的要求。它不需要是一个端口 - 您可以使用文件观察器服务,只需检查目录中创建的文件。你需要的是:频道,用户可以用它来与你的服务器进行通信。这个频道是怎样的;由你决定。

这就是创建服务时的要点:您必须直接得到您的要求,然后设计满足这些要求的解决方案。

+0

注意到GhostCat,你在说停止这个过程的唯一方法是使用侦听端口权限进行查杀。 – DEADEND

+0

感谢和注意到GhostCat。 – DEADEND

+0

@ GhostCat。大。再一次感谢你。 – DEADEND