binarywang/weixin-java-mp-demo-springmvc

单例导致并发访问线程阻塞问题

wchgogo opened this issue · 1 comments

demo中com.github.binarywang.demo.spring.controller.WxMenuController的WxMpService域是单例。
我们知道WxMpService在实现上加了锁(详见me.chanjar.weixin.mp.api.impl.WxMpServiceAbstractImpl#executeInternal 有synchronized 修饰符)。
这样就导致并发情况下使用该单例的多个线程存在锁竞争,并发量大时线程大量阻塞。
例如,假设executeInternal 执行一次平均需要200ms,那么单例每秒只能处理5次调用,超出5次就会有线程阻塞。这在生产环境下几乎不可忍受。
我还有一个疑问:如果每个线程都创建一个新的WxMpService实例,是否有问题呢? 比如会使用过多的内存?

你自己可以尝试一下