Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如果不满足启动要求,终止程序的最佳做法是什么_Java_Exit - Fatal编程技术网

Java 如果不满足启动要求,终止程序的最佳做法是什么

Java 如果不满足启动要求,终止程序的最佳做法是什么,java,exit,Java,Exit,我的应用程序中有一个初始化线程,它聚合并顺序运行几个子线程(检查必要的目录,检查xml文件是否可用,等等)。如果不满足要求,我希望我的程序安全终止 这里应该使用什么方法 如果每个子线程终止程序,如果他发现自己的需求没有得到满足(例如在javaSystem.exit(0);),我认为这不是一个好的做法 我的另一个想法是,每个线程在全局映射中设置一个布尔值。初始化线程后会检查映射(但如果子线程2依赖于子线程1,则会出现问题)。这样做的好处是,应用程序可以“软”终止 问题 因此,如果不满足启动要求

我的应用程序中有一个初始化线程,它聚合并顺序运行几个子线程(检查必要的目录,检查xml文件是否可用,等等)。如果不满足要求,我希望我的程序安全终止

这里应该使用什么方法

  • 如果每个子线程终止程序,如果他发现自己的需求没有得到满足(例如在java
    System.exit(0);
    ),我认为这不是一个好的做法

  • 我的另一个想法是,每个线程在全局映射中设置一个布尔值。初始化线程后会检查映射(但如果子线程2依赖于子线程1,则会出现问题)。这样做的好处是,应用程序可以“软”终止

问题

因此,如果不满足启动要求,终止项目(约6 kLOC的中小型项目)被视为良好做法。该概念应包括(至少)打印详细错误消息的可能性



因为问题太广泛了。我将其限制为java,以减少其广泛性。为了使它更复杂,我也会很乐意使用包含并行性的概念。

这取决于每种语言,但我认为一个好方法是运行一个预检查程序,检查一切是否正常。最后它会生成一个答案,如果答案是肯定的,你的主程序就会运行。换句话说,您的预检查实际上就是所谓的主程序

这取决于每种语言,但我认为一个好方法是运行一个预检查程序,检查一切是否正常。最后它会生成一个答案,如果答案是肯定的,你的主程序就会运行。换句话说,您的预检查实际上就是所谓的主程序

系统。退出(0)
通常用于成功终止。所以除了
0
之外的任何东西都可能是更好的选择

但是为什么不让每个“子进程”抛出一个由主程序处理的异常呢?设置全局设置有代码气味。

系统。退出(0)
通常用于成功终止。所以除了
0
之外的任何东西都可能是更好的选择

但是为什么不让每个“子进程”抛出一个由主程序处理的异常呢?设置全局代码有一种气味

如果每个子进程发现自己的 我认为没有满足要求(例如在java
System.exit(0);
)中) 这不是一个好的做法

子进程如何终止主程序?我想你说的是实际的操作系统进程。这些进程可以自行终止,主程序可以监视所有子进程的终止。当退出时代码不成功(
1
),主程序可以自行终止

如果每个子进程发现自己的 我认为没有满足要求(例如在java
System.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()
的结尾。我认为如果你有一些