问题说明
我做了一个多线程从队列中取数据去消费,然后搞了个策略模式,根据队列当中数据的key进行区分然后入库.遇到的问题就是,在压测的时候个别请求会报ClassCastException异常.也就是并不是所有请求都报错
原因分析
是由于多个线程共享一个EventLogBaseDO引起的多线程问题,也就是上图三中,所有线程都通过client处理策略,所有线程都会更新EventLogBaseDO的引用,前一个线程还没处理完发生了线程切换,后一个线程就把这个引用更新了,然后又切换回来,就产生了这个异常.
解决方案
方案1
加同步锁可以解决这个进程内部并发问题,但是这个方式太重了
方案2
我直接把对应的类型转换,放到对应的策略子类中去做,也可以避免这个问题
总结
总的来说还是对多线程的操作不熟悉引起的BUG,记录一下以便回顾