异常后的线程处理

时间:2013-12-20 08:14:33

标签: java multithreading performance

在我的应用程序中发生异常时使用thread.sleep  如果在任何一个线程中发生任何异常,它应该等待一段时间并且必须再试一次

我面临的问题意味着100个请求,如果50个意外发生,应该等待一段时间,然后再试一次,如果有的话  异常发生意味着它也应该等到成功

我觉得这会影响性能和系统使用。

请告诉我你的建议。如果发生任何异常,创建新线程会更好吗? 或者其他任何方式?

2 个答案:

答案 0 :(得分:2)

重试异常并不是一个坏主意,但你应该确保:

  1. 例外是暂时的(即你有理由相信它可能 重试成功,如网络错误)
  2. 您有办法阻止永远重试(例如“max retry”)
  3. 您不会因为过于频繁的重试而导致系统过载。使用指数退避策略(或者甚至只是相当长的等待时间)
  4. 规则2的例外是可能的(有时你确实希望东西永远重试)。

答案 1 :(得分:1)

从这个问题来看,我明白,你在谈论RunTimeExceptions

1)首先我想建议一下,你应该检查在运行时可能真正抛出异常的代码区域,即处理文件。

2)另一件事是你必须处理这种情况,以便减少异常情况。即第一个检查文件可用,然后只尝试读取它,在写入之前检查权限等。这样可以减少重试频率。 3)如果上述两种操作均失败,则意味着服务中断等情况永远无法处理,您可以重新考虑所有必要的方面,例如 - MAX尝试,MAX超时您要重新尝试的敌人,离开尝试一定量的尝试或时间等后尝试。

希望这有帮助。