如果不满足起始要求,则终止程序被视为良好做法

时间:2013-09-04 15:45:51

标签: java exit

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

这里应该采用什么方法?

  • 如果每个子线程终止程序,如果他发现他的要求不符合(例如在java System.exit(0);中),我认为这不是一个好习惯。

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

问题

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


因为这个问题太宽泛了。我将它限制在java以减少它的广泛性。为了使它更复杂,我也会对包含并行性的概念感到高兴。

5 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

  

每个子进程是否应该终止程序,如果他找到了   我认为不符合要求(例如在java System.exit(0);中)   这不是一个好习惯。

子进程如何终止主程序?我假设你在谈论实际的操作系统进程。那些可以终止自己,主程序可以监视所有子进程的终止。当一个代码以不成功的代码(1)退出时,主程序可以自行终止。

答案 2 :(得分:1)

如果您只是调用一系列子例程,请让每个子例程成功返回true,如果失败则返回false

这些例程的调用者可以检查结果,并在任何例程失败时正常终止程序。

例如

bool b = true; // Indicates success of initialization sequence

if (b && !(b = initFoo()))
    ; // Log your failure

if (b && !(b = initBar()))
    ; // Log your failure

但我同意让一个给定的子程序终止应用程序不是一个好的选择。将该决定交给来电者。

答案 3 :(得分:0)

System.exit(0)传统上用于成功终止。所以0以外的任何东西都可能是更好的选择。

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

答案 4 :(得分:0)

让子进程退出并使用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。