在Web应用程序中,我的代码创建了一些守护程序线程作为内部类,以检查传入请求中的一些信息。
private static class AlertThread extends Thread {
private AlertThread() {
setDaemon(true);
}
public void run() {
while (true) {
try {
...
}
catch (InterruptedException e1) {
LogFactory.getLog(AlertThread.class)
.warn("InterruptedException when waiting");
e1.printStackTrace();
}
catch (Exception e) {
mainLogger.error("Error processing Alert " + e.getMessage());
}
}
}
}
代码运行良好,并且线程运行正常,但我想确保此线程将始终运行,如果它被杀死(由于任何未知原因),我应该如何重新启动新实例?
答案 0 :(得分:3)
最好的解决方案是不要让它一开始就死掉。你可以这样做
<nav class="navbar navbar-inverse navbar-static-top" role="navigation">
<div class="container">
<div class="navbar-header">
<button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#bs-example-navbar-collapse-1">
<span class="sr-only">Toggle navigation</span>
</button>
</div>
<div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
<ul class="nav navbar-nav">
<li><a href="index.php" class="activepage">Home</a></li>
<li><a href="why.php">Why Us?</a></li>
<li><a href="process.php">Process</a></li>
<li><a href="news.php">News</a></li>
<li><a href="#contact">Contact</a></li>
</ul>
</div>
</div>
</nav>
除非您关闭应用程序,否则此线程不会死亡。
BTW你应该在启动它之前使该线程成为一个守护进程,你应该避免扩展Thread,因为这样做会导致细微的错误。
答案 1 :(得分:1)
在编写代码时,while
循环可以由不是Trowable
的任何Exception
终止。它可以是Error
,例如StackOverflowError
。