如何防止异常停止我的程序?

时间:2016-07-28 22:17:33

标签: java

我使用线程运行应用程序的一半,另一半运行自己。我这样做是因为获取数据的一部分(因为我运行无限循环)不会阻止另一部分完成它的工作。现在我想知道:如果一个部件发生异常,它会阻塞其他部分,因为它们相互依赖。

所以我的问题是,我怎么能阻止异常停止我的整个程序并让它继续做呢?

3 个答案:

答案 0 :(得分:0)

尝试捕获或抛出异常。如果这些都不熟悉,我会查看它们。

try-catch的一个例子

try
{
//your code that may throw exception
}catch(TheException e){
e.printStackTrace(); // or however you handle exceptions
}

抛出异常的良好资源:https://docs.oracle.com/javase/tutorial/essential/exceptions/throwing.html

答案 1 :(得分:0)

从一个线程抛出异常通常不会影响其他线程的运行时。在这方面,线程在他们自己的小世界中有点不对劲。

也就是说,如果两个线程正在共享一些状态(无论是直接通过堆还是间接地通过数据库或类似的东西),并且一个线程使应用程序的数据处于不稳定/损坏的状态,因为它被轰炸,这显然可能影响其他线程的行为,使他们做进一步“坏事”。你会希望尽可能地防止这种情况;最好的方法是尽可能地记录你的异常,并在抛出时捕获和处理它们,并通过强大的单元测试来支持你的逻辑。

答案 2 :(得分:0)

你可以创建一个名为running的布尔变量,这样当你的while循环工作正常时,这个变量就是真的。捕获到异常,变量立即变为false。然后,您的主要任务可以在想要使用共享数据的任何时候检查变量。如果变量为true,则读取数据;否则,根据捕获的异常类型重新启动线程。

请记住,为了使变量为false,您需要在catch子句中包含其更新。

有更好,更复杂的方法,比如使用ExecutorService