前言
一个说难不难,说简单竟看不出来是哪里问题的一个 bug。是的 可能自己能力
和经验尚浅无法识别,下面你们能否用火眼金睛一眼让 bug 原形毕露
(这个问题是忽然暴露出来的,无任何征兆,没人改动过,生产上运行了很长时
间,故很奇怪,所以这个间谍看来很会隐藏)
隐藏的“间谍”
下面先来看代码(伪代码)
code
/**
* 两个从数据库查询的耗时任务
* @param countDownLatch
* @param all
*/public static void testCount(CountDownLatch countDownLatch,
List<String> all) {
for (int i = 0; i < 2; i++) {
int finalI = i;
ThreadPoolFactory.getGeneral().execute(() -> {
try {
List<String> countList = new ArrayList<>();
//这里之所以用 for 循环,是因为查询业务需要 0 和 1 两个状态
去查询
if (finalI == 0) {
//这里其实是查询数据库的 mapper 操作,为了方便演示
countList.add("1");
countList.add("2");
countList.add("3");
} else {
//这里其实是查询数据库的 mapper 操作,为了方便演示
countList.add("5");
countList.add("6");
countList.add("7");
countList.add("8");
}
if (countList != null) {
all.addAll(countList);
}