JDK 8新特性parallelStream 坑

遇到的问题:

项目开发中,遇到一个bug,该bug是多次刷新页面。就会偶现404页面现象,404是因为后台根据登录角色查询权限未查出来。页面菜单路由是根据权限配置显示,后台查询权限接口:

JSONArray jsonArray = new JSONArray();
OAuth2Authentication authentication = (OAuth2Authentication) principal;
authentication.getAuthorities().parallelStream().forEach(ga -> jsonArray.add((ga.getAuthority())));

经过排查,发现是parallelStream()存在问题,底层使用arrayList,该list是线程不安全的。多线程情况下,会出现数据丢失的问题。

解决方案:

修改parallelStream()方法,1:直接用foreach。2:list.stream()

authentication.getAuthorities().forEach(ga -> jsonArray.add((ga.getAuthority())));
或者
authentication.getAuthorities().stream().forEach(ga -> jsonArray.add((ga.getAuthority())));

关于parallelStream详情,可以浏览
https://www.jianshu.com/p/17d432f211f4

你可能感兴趣的:(项目)