多线程共享变量引起的BUG

92 阅读1分钟

问题说明

我做了一个多线程从队列中取数据去消费,然后搞了个策略模式,根据队列当中数据的key进行区分然后入库.遇到的问题就是,在压测的时候个别请求会报ClassCastException异常.也就是并不是所有请求都报错

原因分析

是由于多个线程共享一个EventLogBaseDO引起的多线程问题,也就是上图三中,所有线程都通过client处理策略,所有线程都会更新EventLogBaseDO的引用,前一个线程还没处理完发生了线程切换,后一个线程就把这个引用更新了,然后又切换回来,就产生了这个异常.

解决方案

方案1

加同步锁可以解决这个进程内部并发问题,但是这个方式太重了

方案2

我直接把对应的类型转换,放到对应的策略子类中去做,也可以避免这个问题

总结

总的来说还是对多线程的操作不熟悉引起的BUG,记录一下以便回顾