猿问

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

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

MM们

不要再controller里面再开线程,可以把远程访问来的数据放到缓存中,比如ehcache或者memcache,先判断缓存是否有以及时间戳,符合要求,就从缓存读取,否则远程访问获取

眼眸繁星

是为了不阻塞jsp页面的渲染吗?1、可以等jsp页面加载完了之后,通过js进行Ajax请求调用加入数据库的接口。2、可以使用MQ进行异步处理
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答