我有一个应用程序,旨在“永远运行”。为了达到这个目的,我的代码处于一个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进程时,此应用程序显示它正在运行。
问题:为什么会这样?
答案 0 :(得分:5)
可能的原因是在处理那些由代码消耗并且消耗的URL时会抛出异常,因此处理失败但应用程序继续运行。遗憾的是,您只显示了评论,而不是任何真实的代码,所以这只是一个假设。
答案 1 :(得分:4)
有很多种可能性,但如果没有更多的代码,我就无法将其精确地缩小到具体的范围。以下是一些想法:
break
语句明确地离开循环。return
中有一些东西,你就会离开循环。OutOfMemoryError
s或StackOverflowError
s。sudo reboot now
。true == false
。 : - )答案 2 :(得分:1)
记录异常:
try{
while(true){
// ......
}
}catch(Throwable t){
//log the Throwable object
}