我先说一下我们公司(某金融公司)的这个需求吧,最近预授信项目要上线了,作为公司实习生的我肯定不能参与核心业务,于是给我分配了这样一个需求。

上传Excel文件,并解析Excel里面的数据,判断userId是否存在,是否存在额度申请,是否存在借款申请,是否存在额度账户,这些都没有的话,判定导入用户有效。

1、上传文件,这个简单一些,直接使用公司自己封装的框架,把文件上传到配置文件配置的路径。下载就是反过来,通过前端传来的地址,去dfs拉取文件。

2、解析过程是在提交授信申请的时候触发, 上传的excel可能会出现导入大量用户(破万)的情况,所以如果是单线程同步处理,可能一小时也处理不完。因为解析一次需要的判断逻辑很多,中间调用了很多dubbo接口,网络延迟是必然的。

有两种方案: 一、使用跑批任务定时拉取申请授信的数据,然后异步处理。  二、使用多线程解析Excel

第一种也可以,但是需要改动其他项目的代码,使得系统复杂度增加。

这里使用了第二种 ,代码如下

    @Overridepublic List<Map<String, Integer>> deal(List<Map<Integer, String>> list, String bitchId, String name) {final int THREAD_NUM = 100;ExecutorService executorService = Executors.newFixedThreadPool(THREAD_NUM);List<Future<Map<String, Integer>>> futures = new ArrayList<>(THREAD_NUM);List<Map<String, Integer>> maps = new ArrayList<>();int size = list.size();for (int i = 0; i < THREAD_NUM; i++) {List<Map<Integer, String>> subList = (i == THREAD_NUM - 1) ? list.subList(size / THREAD_NUM * i, list.size()): list.subList(size / THREAD_NUM * i, size / THREAD_NUM * (i + 1));DealCallable dealCallable = new DealCallable();dealCallable.setThreadNum(i);dealCallable.setBitchId(bitchId);dealCallable.setUserName(name);dealCallable.setBasPreApprovalService(this);dealCallable.setList(subList);futures.add(executorService.submit(dealCallable));}for (Future<Map<String, Integer>> future : futures) {try {maps.add(future.get());} catch (Exception e) {log.info("线程处理错误", e);}}executorService.shutdown();return maps;}
DealCallable这个类是自定义的,继承了Callable接口,并且重写了call()方法,返回解析的数据,代码如下
@Data
public class DealCallable implements Callable<Map<String, Integer>> {private int threadNum;private String bitchId;private String userName;private BasPreApprovalService basPreApprovalService;private List<Map<Integer, String>> list;@Overridepublic Map<String, Integer> call() throws Exception {return basPreApprovalService.analysis(list, bitchId, userName, threadNum);}
}

面试必问系列:5、知道多线程吗?谈谈你参与过的多线程实战场景相关推荐

  1. 面试必问系列之在浏览器中输入URL后到网页显示 其间发生了什么?

    文章目录 @[TOC](文章目录) 1:解析URL网址,从而生成发送给Web服务器的Http请求信息 2:真实地址查询-----(DNS域名解析) 3:调用协议栈 4:可靠的传输 TCP 5:远程定位 ...

  2. Android面试必问!2021最新中高阶Android面试题总结,理论+实战双管齐下!

    前言 金九银十面试季,相信大家肯定急需一套Android面试宝典,今天小编就给大家准备了我珍藏已久的Android高阶面试宝典,一份超级详细的Android面试必备知识点,供大家学习 ! 想必每一个安 ...

  3. 面试必问!多线程并发问题

    多线程并发问题,基本是面试必问的. 大部分同学应该都知道Synchronized,Lock,部分同学能说到volatile.并发包,优秀的同学则能在前面的基础上,说出Synchronized.vola ...

  4. 线程同步有几种方法_架构师面试必问的多线程状态切换及常用方法

    架构师面试必问的多线程状态切换及常用方法 一.问题背景 Java架构师面试中,多线程状态切换及常用方法几乎是必问的,要掌握创建多线程的方式和方法. 二.创建多线程的几种方式 2.1方式一继承Threa ...

  5. 面试必问:多线程与线程池

    前言 前几章都在讲一些锁的使用和原理,主要是为了保证多线程情况下变量的原子性,但这并不是说多线程不好,合理利用还是有好处的.至于什么好处,看下面内容就懂了,先打个比方吧(谁叫比方,上来挨打):假如你体 ...

  6. 面试必会系列 - 1.6 Java 垃圾回收机制

    本文已收录至 Github(MD-Notes),若博客中有图片打不开,可以来我的 Github 仓库:https://github.com/HanquanHq/MD-Notes,涵盖了互联网大厂面试必 ...

  7. 互联网公司面试必问的mysql题目(下)

    这是mysql系列的下篇,上篇文章地址我附在文末. 什么是数据库索引?索引有哪几种类型?什么是最左前缀原则?索引算法有哪些?有什么区别? 索引是对数据库表中一列或多列的值进行排序的一种结构.一个非常恰 ...

  8. 面试必会系列 - 5.3 LVS负载均衡

    本文已收录至 Github(MD-Notes),若博客中图片模糊或打不开,可以来我的 Github 仓库,包含了完整图文:https://github.com/HanquanHq/MD-Notes,涵 ...

  9. 面试必会系列 - 11.1 一文读懂Maven:Maven工程类型、项目结构、工程关系、常见命令等

    本文已收录至 Github(MD-Notes),若博客中图片模糊或打不开,可以来我的 Github 仓库,包含了完整图文:https://github.com/HanquanHq/MD-Notes,涵 ...

最新文章

  1. 华为实施微服务架构的五大军规
  2. Opensmile 简介
  3. ASP:关于生成HTML文件的新闻系统
  4. Consecutive Sum Riddle(800)
  5. jzoj3890-长途旅行【同余最短路】
  6. 女博士年薪156万入职华为!实力演绎美貌与智慧并重
  7. 如何在硅谷一夜暴富?
  8. CCNA零基础视频教程本人原创 下载地址
  9. 虚拟基础架构管理——直接通过 VMware vCenter 管理 NetApp 存储操作
  10. java pdf 加水印
  11. 成就:优秀的管理者成就自己,卓越的管理者成就他人(读后感)
  12. ios 点生成线路 百度地图_iOS百度地图开发之路径规划
  13. c jave等语言作用,编程语言的前世今生,看 Java、C、C++ 等语言的演变
  14. 【C语言】BC90小乐乐算多少人被请家长(DAY 5)
  15. Kotlin版本的新闻类APP 简闻
  16. Android 蓝牙开发——PBAP协议(十)
  17. 每日小技巧——教你用一行Python代码去除照片背景
  18. 网页消重算法(via北大天网课题组)
  19. 做一个新产品需求,体验的分析文档?(例:喜马拉雅FM)
  20. 安卓 微信网页缓存清除方法

热门文章

  1. Linux直接在通过终端打开图片文件
  2. 生成网站与发布网站的区别
  3. c语言判断正整数x是否为同构数,c语言上机题库(阅读).doc
  4. 1024专场回顾 | 企业级开源数据库openGauss论坛
  5. 一个完整的网站建设需要哪些流程?
  6. Jmeter-BeanShell后置处理器
  7. php动态网站开发测评试题,智慧职教PHP动态网站开发单元测试答案
  8. linux系统vi替换命令,linux:vi 替换命令
  9. border之border-style用法
  10. 疫情下的科技内卷:租房被卷进“网购”时代