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

 何氏眼科-李剑华_951_745 发布于 2022-11-02 13:57

有一个使用场景,在用户一次的访问中,我向steam的dota2接口请求了20条用户的最近比赛记录,然后传到jsp渲染了,我想把这20条记录存在数据库中,这个操作比较耗时,就新开了一个线程这样做会不会导致线程安全问题,好像不推荐在servlet中新开线程?还有其他的解决方案吗?
模拟代码
@RequestMapping("/thread")

@ResponseBody
public String actionThread(){
    Thread t=new Thread(new Runnable() {
        @Override
        public void run() {
            try {
                Thread.sleep(5000);
                System.out.println("数据库操作");        
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    });
    t.start();
    return "nihao";
}

谢谢各位 查了文档用了springmvc容器级的taskexecutor ,可以限制线程数目和等待队列的大小。



@Async
public void test(String s){
    try {
        Thread.currentThread().sleep(5000);
        System.out.println("test asny"+s);
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
}
2 个回答
  • 是为了不阻塞jsp页面的渲染吗?
    1、可以等jsp页面加载完了之后,通过js进行Ajax请求调用加入数据库的接口。
    2、可以使用MQ进行异步处理

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

    2022-11-12 01:44 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有