美文网首页
使用ThreadLocal解决多线程问题(一)

使用ThreadLocal解决多线程问题(一)

作者: 我就要取名叫夏末 | 来源:发表于2018-11-16 09:35 被阅读0次

使用场景:导入功能,向若干设备下导入若干条维护标准,如果设备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源码解析与运用(上)

    ThreadLocal需要解决的问题是什么 ThreadLocal被用来“解决多线程并发”问题 ThreadLoc...

  • ThreadLocal

    ThreadLocal使用场合主要解决多线程中数据因并发产生不一致的问题。 ThreadLocal类中一共有4个方...

  • ThreadLocal 详解,超级详细

    什么是 ThreadLocal? ThreadLocal 诞生于 JDK 1.2,用于解决多线程间的数据隔离问题。...

  • Java 面试系列:ThreadLocal 有什么用 + 面试题

    什么是 ThreadLocal?ThreadLocal 诞生于 JDK 1.2,用于解决多线程间的数据隔离问题。也...

  • 使用ThreadLocal解决多线程问题(一)

    使用场景:导入功能,向若干设备下导入若干条维护标准,如果设备A初始时没有值,我们假设导入Excel中的所有标准项都...

  • 多线程之ThreadLocal

    ThreadLocal threadLocal是用来解决多线程并发访问的线程安全问题,其实就是把变量隔离在线程内部...

  • Java ThreadLocal深度解析

    ThreadLocal不是用来解决共享对象的多线程访问问题的,一般情况下,通过ThreadLocal.set() ...

  • ThreadLocal

    ThreadLocal为解决多线程程序的并发问题提供了一种新的思路。使用这个工具类可以很简洁地编写出优美的多线程程...

  • ThreadLocal 用法

    ThreadLocal为解决多线程程序的并发问题提供了一种新的思路。使用这个工具类可以很简洁地编写出优美的多线程程...

  • ThreadLocal内存泄漏

    ThreadLocal是为了解决对象不能被多线程共享访问的问题,通过ThreadLocal.set方法将对象实例保...

网友评论

      本文标题:使用ThreadLocal解决多线程问题(一)

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