为什么我的应用程序停止运行,而它有一个while(true)循环?

时间:2011-01-15 08:58:55

标签: java multithreading

我有一个应用程序,旨在“永远运行”。为了达到这个目的,我的代码处于一个while(true)循环之下。

while(true){

   //My code is here 
   //What it does is that it calls some Url, 
   //gets xml, parses it and stores the values to a db.

}

此应用程序作为Java应用程序运行,并在Redhat Linux上的jdk 5上运行。一两天后,我意识到日志的活动甚至是5天前,这意味着它在5天前停止工作。但是,当我检查机器中的java进程时,此应用程序显示它正在运行。

问题:为什么会这样?

3 个答案:

答案 0 :(得分:5)

可能的原因是在处理那些由代码消耗并且消耗的URL时会抛出异常,因此处理失败但应用程序继续运行。遗憾的是,您只显示了评论,而不是任何真实的代码,所以这只是一个假设。

答案 1 :(得分:4)

有很多种可能性,但如果没有更多的代码,我就无法将其精确地缩小到具体的范围。以下是一些想法:

  1. 循环中某处可能有break语句明确地离开循环。
  2. 如果你的循环在一个函数中,并且函数循环return中有一些东西,你就会离开循环。
  3. 如果循环中的某些内容抛出未捕获的异常,则循环将终止。这还包括OutOfMemoryError s或StackOverflowError s。
  4. 等内容
  5. 由于一个不寻常的错误,JVM可能在一夜之间崩溃。
  6. 外部进程终止了JVM。
  7. 系统重新启动以安装更新,或者因为有人登录并运行sudo reboot now
  8. 布尔算术的规律发生了变化,现在变为true == false。 : - )

答案 2 :(得分:1)

记录异常:

try{
    while(true){
       // ......
    }
}catch(Throwable t){
  //log the Throwable object
}