繁体   English   中英

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

[英]How do I prevent an exception from stopping my program?

我正在使用一个线程来运行一个应用程序的一半,而另一半正在单独运行。 我这样做是为了使一部分获取数据(因为我正在运行无限循环)不会阻止另一部分完成其工作。 现在我在想:如果一个部分发生异常,它将阻止另一部分,因为它们彼此依赖。

所以我的问题是,如何防止异常停止我的整个程序并使它继续运行?

尝试捕获或引发异常。 如果这些听起来都不熟悉,我会去找他们。

尝试捕捉的例子

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

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

就是说,如果两个线程共享某个状态(无论是直接通过堆还是间接通过数据库或类似的状态),并且一个线程由于炸开了应用程序而使其数据处于不稳定/损坏状态,则可能明显影响行为其他线程,使它们做进一步的“坏事”。 您将尽可能避免这种情况; 最好的方法是尽可能地记录您的异常,并在引发异常时对其进行捕获和处理,并使用健壮的单元测试来支持逻辑。

您可以创建一个布尔变量(可能称为running以便在while循环正常运行时,此变量为true。 立即捕获异常,变量变为false。 然后,您的主要任务可以在要使用共享数据时随时检查变量。 如果变量为true,则读取数据;否则为false。 否则,根据捕获的异常类型执行其他操作,例如重新启动线程。

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

有更好更好的方法,例如使用ExecutorService

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM