【发布时间】:2017-06-19 23:47:00
【问题描述】:
我正在开发一个 java 独立应用程序,它必须将一批文件上传到 rest api。我想在需要时从命令提示符停止应用程序,但如果应用程序正在上传文件,它必须完成该文件,并且必须在开始上传另一个文件之前停止。
【问题讨论】:
-
我建议对非守护线程以及 JVM 如何退出进行一些研究。 stackoverflow.com/questions/2213340/…
标签: java
我正在开发一个 java 独立应用程序,它必须将一批文件上传到 rest api。我想在需要时从命令提示符停止应用程序,但如果应用程序正在上传文件,它必须完成该文件,并且必须在开始上传另一个文件之前停止。
【问题讨论】:
标签: java
它不能在您希望的任何时候停止,因为(我假设)您的程序在单个线程上运行,因此必须按照给定的顺序完成每个任务。
上传文件列表时,您可以在一个线程的前端提供某种侦听器,而文件在后台上传。当 Thread1 收到它需要退出的信息时,它可以设置某种全局布尔值,线程 2 在开始上传第二个文件之前检查它。
将上传进程设为后台线程允许您修改进程中的程序。
如果您正在寻找有关正常退出程序的文档,可以在这里找到:http://docs.oracle.com/javase/7/docs/api/java/lang/Runtime.html#exit%28int%29
【讨论】:
您可以快速检查应用程序的退出代码 JVM 关闭挂钩中的 isUploading 标志。如果为假,则继续退出。如果为 true,则等待上传过程完成或超时。
【讨论】:
公共类主{
public static void main(String[] args) {
Runtime r = Runtime.getRuntime();
r.addShutdownHook(new ShutdownHook());
while(Flag.flag){
System.out.println("Application is still running......");
}
if(!Flag.flag) {
System.out.println("goin to exit the application");
Flag.shutdownFlag = false;
return;
}
}
}
公共类标志{
public static boolean flag = true;
public static boolean shutdownFlag = true;
}
公共类 ShutdownHook 扩展线程 {
public void run() {
System.out.println("Shutdown hook is initiated");
Flag.flag = false;
while (Flag.shutdownFlag) {
System.out.println("Waiting for application to complete the task..");
}
}
}
我在命令提示符下运行 jar。一旦我们想停止应用程序,我们可以在命令提示符下按 ctrl+c。
【讨论】: