使用场景:导入功能,向若干设备下导入若干条维护标准,如果设备A初始时没有值,我们假设导入Excel中的所有标准项都是有效的,那么就可以全部一次导入;如果设备A有设备,那么就无法导入任何一条新设备,无论待导入标准是否有效。
实现逻辑很简单:首先判断A是否存在标准,查表后返回一个list<>,如果list<>为null或者size()=0,说明该设备下没有标准,那么,本次excel导入的所有有效标准都可以被写入。
问题来源于导入框架的机制,是读取一条校验通过后直接插入数据库,导入第一条有效标准后,校验第二条时,会因为数据库中A设备下已存在最近导入的第一条标准,而拒绝导入其他数据。
解决的思路是,使用一个map<String,Boolean>来记录能否导入,当第一条设备标准导入成功时,在map中写入(key:设备编号,value:true),这样第二条设备标准直接去查询map,若map中已有该设备编号,说明一开始该设备下时没有标准的,于是第二条也能导入。如果第一条设备标准导入失败,就把boolean写为false,这样第二条同设备下的标准查询到为false,就拒绝写入。
这样处理后,能够正常走完逻辑了,但是如果在导入一份比较大量的数据时,是需要一些时间的,map中也已经赋了一些值,这时有第二个人,又调用了这个导入接口进行导入,这样他启动时会读取map,能够修改这个map里面的内容,这样就出现了多线程问题。
考虑使用ThreadLocal线程本地变量解决该多线程问题。详见后续博文。
使用ThreadLocal解决多线程问题(一)
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
推荐阅读更多精彩内容
- 1.ios高性能编程 (1).内层 最小的内层平均值和峰值(2).耗电量 高效的算法和数据结构(3).初始化时...