Java- 如何正确停止 ScheduledExecutorService
Java- How to stop ScheduledExecutorService properly
假设,在现场,下面的代码是 运行 每分钟使用 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();
}
}
}
如果存在任何问题,如何在 live 后正确停止此守护进程?!
您必须考虑添加一个可以调用 "somehow" 的方法来告诉服务停止。例如,您的 "service" 可能正在监听某个端口并从那里获取命令。
是的,这很宽泛,但您输入的问题也是如此。
鉴于您的评论:侦听命令在这里只是一个选项。这真的取决于你的要求。它不需要是一个端口——例如,您可以使用文件观察器服务并简单地检查在目录中创建的文件。您需要的是:一个 channel 用户可以用来与您的服务器通信。该频道的外观如何;由你决定。
这就是创建 服务的要点:您必须明确您的要求,然后设计满足这些要求的解决方案。
假设,在现场,下面的代码是 运行 每分钟使用 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();
}
}
}
如果存在任何问题,如何在 live 后正确停止此守护进程?!
您必须考虑添加一个可以调用 "somehow" 的方法来告诉服务停止。例如,您的 "service" 可能正在监听某个端口并从那里获取命令。
是的,这很宽泛,但您输入的问题也是如此。
鉴于您的评论:侦听命令在这里只是一个选项。这真的取决于你的要求。它不需要是一个端口——例如,您可以使用文件观察器服务并简单地检查在目录中创建的文件。您需要的是:一个 channel 用户可以用来与您的服务器通信。该频道的外观如何;由你决定。
这就是创建 服务的要点:您必须明确您的要求,然后设计满足这些要求的解决方案。