问题复现
假设线上是一个典型的Spring Boot Web项目,某一块业务的处理逻辑为:
接受一个name字符串参数,然后将该值赋予给一个注入的bean对象,修改bean对象的name属性后再返回,期间我们用了 Thread.sleep(300)
来模拟线上的高耗时业务
代码如下:
1 |
|
上述的nameService也非常简单,一个普通的Spring Service对象
具体代码如下所示:
1 |
|
相信使用过Spring Boot的伙伴们对这段代码不会有什么疑问,实际运行也没有问题,测试也能跑通,但真的上线后,里面却会产生一个线程安全问题
不相信的话,我们通过线程池,开200个线程来测试NameController就可以复现出来