今天的一个项目中,使用到多线程,但是出现了一个极其诡异的错误。
原理:一串文本类似css被解析成了map集合,根据数量添加线程。多线程任务是解析其中含义对文字改变样式,如果解析完就将这对key和value移除
代码片段:
这是多线程内部操作(具体操作部分没有截图,主要是map集合这段)
之后就出现了:
五个css样式只能解析四个或者三个,修改多线程这边一点用都没有!
经过半天的寻找,最终锁定了问题:
多线程和for循环是同步执行的,for循环还没循环到最后,map集合中有些元素已经被移除,这就导致for循环循环map集合变短了,因为创建的线程数量少于实际css的key-value对数量,所以有一部分属性就没有被成功解析。