服务端独立循环线程编码规范 - kyohwang/games GitHub Wiki

制定原因:独立线程逻辑发生异常,导致线程休眠未执行,引起如大量输出日志、消耗性能等问题。

  1. 背景:中华项目帮会排名功能使用独立线程执行,逻辑是排序完成后线程休眠10s,然后继续下一个循环。会对while循环内部所有逻辑进行统一的异常捕获,保证线程不会因为异常而终止,代码如下:

  1. 问题:如上图所述,leagueRankBoardCast方法在执行时发生了异常,被捕获,直接进入了catch块进行异常日志输出,而没有执行线程休眠,然后继续循环,继续发生异常并被捕获。

  2. 分析:该问题的产生原因即在于线程的核心逻辑和线程休眠的逻辑写在同一个异常捕获中,当核心逻辑发生异常时,线程休眠的逻辑将会被忽略,导致问题。

解决方案:将线程执行的核心逻辑和休眠逻辑分开到两个异常捕获中,另外在修改时也发现了一些特殊的情况,现对这部分逻辑的编码进行统一的规范,供大家参考: