Java 如果不满足启动要求,终止程序的最佳做法是什么
我的应用程序中有一个初始化线程,它聚合并顺序运行几个子线程(检查必要的目录,检查xml文件是否可用,等等)。如果不满足要求,我希望我的程序安全终止 这里应该使用什么方法Java 如果不满足启动要求,终止程序的最佳做法是什么,java,exit,Java,Exit,我的应用程序中有一个初始化线程,它聚合并顺序运行几个子线程(检查必要的目录,检查xml文件是否可用,等等)。如果不满足要求,我希望我的程序安全终止 这里应该使用什么方法 如果每个子线程终止程序,如果他发现自己的需求没有得到满足(例如在javaSystem.exit(0);),我认为这不是一个好的做法 我的另一个想法是,每个线程在全局映射中设置一个布尔值。初始化线程后会检查映射(但如果子线程2依赖于子线程1,则会出现问题)。这样做的好处是,应用程序可以“软”终止 问题 因此,如果不满足启动要求
- 如果每个子线程终止程序,如果他发现自己的需求没有得到满足(例如在java
),我认为这不是一个好的做法System.exit(0);
- 我的另一个想法是,每个线程在全局映射中设置一个布尔值。初始化线程后会检查映射(但如果子线程2依赖于子线程1,则会出现问题)。这样做的好处是,应用程序可以“软”终止
因为问题太广泛了。我将其限制为java,以减少其广泛性。为了使它更复杂,我也会很乐意使用包含并行性的概念。这取决于每种语言,但我认为一个好方法是运行一个预检查程序,检查一切是否正常。最后它会生成一个答案,如果答案是肯定的,你的主程序就会运行。换句话说,您的预检查实际上就是所谓的主程序 这取决于每种语言,但我认为一个好方法是运行一个预检查程序,检查一切是否正常。最后它会生成一个答案,如果答案是肯定的,你的主程序就会运行。换句话说,您的预检查实际上就是所谓的主程序
系统。退出(0)
通常用于成功终止。所以除了0
之外的任何东西都可能是更好的选择
但是为什么不让每个“子进程”抛出一个由主程序处理的异常呢?设置全局设置有代码气味。系统。退出(0)
通常用于成功终止。所以除了0
之外的任何东西都可能是更好的选择
但是为什么不让每个“子进程”抛出一个由主程序处理的异常呢?设置全局代码有一种气味
如果每个子进程发现自己的
我认为没有满足要求(例如在javaSystem.exit(0);
)中)
这不是一个好的做法
子进程如何终止主程序?我想你说的是实际的操作系统进程。这些进程可以自行终止,主程序可以监视所有子进程的终止。当退出时代码不成功(1
),主程序可以自行终止
如果每个子进程发现自己的
我认为没有满足要求(例如在javaSystem.exit(0);
)中)
这不是一个好的做法
子进程如何终止主程序?我想你说的是实际的操作系统进程。这些进程可以自行终止,主程序可以监视所有子进程的终止。当退出时代码不成功(
1
),主程序可以自行终止。让子进程退出,并用java.lang.process.exitValue()检查返回。子进程退出值应特定于错误
private static final int REQUIREMENT_1_NOT_MET = 1;
private static final int REQUIREMENT_2_NOT_MET = 2;
if (! checkRequirement1Conditions())
System.exit(REQUIREMENT_1_NOT_MET);
if (! checkRequirement2Conditions())
System.exit(REQUIREMENT_2_NOT_MET);
如果进程被设计为继续运行(即,仅在不满足条件时终止),则可能需要忽略抛出的IllegalThreadStateException。让子进程退出,并使用java.lang.process.exitValue()检查返回。子进程退出值应特定于错误
private static final int REQUIREMENT_1_NOT_MET = 1;
private static final int REQUIREMENT_2_NOT_MET = 2;
if (! checkRequirement1Conditions())
System.exit(REQUIREMENT_1_NOT_MET);
if (! checkRequirement2Conditions())
System.exit(REQUIREMENT_2_NOT_MET);
如果进程被设计为继续运行(即,仅在不满足条件时终止),则可能需要忽略抛出的非法ThreadStateException。如果只是调用一系列子例程,则每个子例程在成功时返回
true
,在失败时返回false
这些例程的调用方可以检查结果,并在任何例程失败时优雅地终止程序
比如说
bool b = true; // Indicates success of initialization sequence
if (b && !(b = initFoo()))
; // Log your failure
if (b && !(b = initBar()))
; // Log your failure
但我同意让给定的子例程终止应用程序不是一个好的选择。将该决定权交给调用方。如果只是调用一系列子例程,则让每个子例程在成功时返回
true
,在失败时返回false
这些例程的调用方可以检查结果,并在任何例程失败时优雅地终止程序
比如说
bool b = true; // Indicates success of initialization sequence
if (b && !(b = initFoo()))
; // Log your failure
if (b && !(b = initBar()))
; // Log your failure
但我同意让给定的子例程终止应用程序不是一个好的选择。把决定权交给调用者。Hmm,我学到的是程序应该自行终止,即到达
main()的末尾。
如果你有某种可以传递的检查对象(简单的映射包装器),我认为它在没有静态全局变量的情况下也可以工作。之后,您可以检查对象的内部状态、打印相应的错误消息或通过不启动程序来终止程序。程序提供退出代码是完全合理的。即使如此,主程序仍然可以捕获“子进程”(我认为您指的是操作系统进程以外的其他进程)引发的异常,并优雅地退出。它当然可以与您描述的对象一起工作。但是它看起来很笨拙(我的主观观点)。嗯,我学到的是一个程序应该自行终止,即到达main()
的结尾。我认为如果你有一些