为了账号安全,请及时绑定邮箱和手机立即绑定

springmvc controller 请求中新开线程的困惑

springmvc controller 请求中新开线程的困惑

紫衣仙女 2019-04-13 08:37:20
有一个使用场景,在用户一次的访问中,我向steam的dota2接口请求了20条用户的最近比赛记录,然后传到jsp渲染了,我想把这20条记录存在数据库中,这个操作比较耗时,就新开了一个线程这样做会不会导致线程安全问题,好像不推荐在servlet中新开线程?还有其他的解决方案吗?模拟代码@RequestMapping("/thread")@ResponseBodypublicStringactionThread(){Threadt=newThread(newRunnable(){@Overridepublicvoidrun(){try{Thread.sleep(5000);System.out.println("数据库操作");}catch(InterruptedExceptione){e.printStackTrace();}}});t.start();return"nihao";}谢谢各位查了文档用了springmvc容器级的taskexecutor,可以限制线程数目和等待队列的大小。@Asyncpublicvoidtest(Strings){try{Thread.currentThread().sleep(5000);System.out.println("testasny"+s);}catch(InterruptedExceptione){e.printStackTrace();}}
查看完整描述

2 回答

?
MM们

TA贡献1886条经验 获得超2个赞

不要再controller里面再开线程,可以把远程访问来的数据放到缓存中,比如ehcache或者memcache,先判断缓存是否有以及时间戳,符合要求,就从缓存读取,否则远程访问获取
                            
查看完整回答
反对 回复 2019-04-13
?
眼眸繁星

TA贡献1873条经验 获得超9个赞

是为了不阻塞jsp页面的渲染吗?1、可以等jsp页面加载完了之后,通过js进行Ajax请求调用加入数据库的接口。2、可以使用MQ进行异步处理
                            
查看完整回答
反对 回复 2019-04-13
  • 2 回答
  • 0 关注
  • 436 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信