美文网首页
记一次ArrayList线程安全问题

记一次ArrayList线程安全问题

作者: CoderKK123 | 来源:发表于2020-06-06 21:10 被阅读0次

    现象

    代码中有一段逻辑有时会没有执行完成就突然停止。

    定位

    查看报出的异常。查看异常信息发现有空指针。而往上追代码发现是因为业务逻辑中遍历某list时有元素为null。但是此业务逻辑中这个list的元素是不可能为null的。开始继续往里追找到构造此list相关的代码,发现以下代码:

    List<String> list = Lists.newArrayList();
    Lists.partition(codeList, PAGE_SIZE_1000).parallelStream().forEach(partis -> {
       queryResultList(partis).forEach(result -> {
            //。。。
            list.add(result);
       });
    });
    

    (代码已简化)
    恍然大悟,是因为线程不安全的ArrayList在parallelStream中并发执行add导致的。由于之前移植这块代码时候没有这块list.add逻辑,后来加的,但是没注意外层的parallelStream

    总结

    多线程下的业务逻辑要注意线程安全问题

    相关文章

      网友评论

          本文标题:记一次ArrayList线程安全问题

          本文链接:https://www.haomeiwen.com/subject/odcnzhtx.html