[自用]JAVA 实现异步,或者新起线程 实现功能.

情景: 项目信息存储的表很多,更新项目信息时 同时将项目的汇总信息同步到一个中间表中(该中间表要求实时同步,汇总了多个表的信息). 框架:spring boot 前端:vue

       最开始使用的时更新完项目主体信息后在调用同步中间表的方法,但该方法执行时间过长,(优化更新语句以及索引都已基本优化),所以想到使用异步来实现该操作.

方法1:将同步方法提取出来直接用注解的方式添加新的方法

@Async
public void asynchroProjectWholeProcess(String projectId) {
    // 实时更新工程全流程报表项目部分中间表 by dy 2020-01-21
    logger.info("=======================异步执行同步项目信息开始==========================");
    projectROneService.synchroProjectWholeProcess(projectId);
    logger.info("=======================异步执行同步项目信息结束==========================");
}

执行时报错,提示"循环依赖",本着原代码不动的原则,新建一个新的类然后使用该类下的带有注解的方法

@Component
public class ProjectCommonAsyncManageImpl implements ProjectCommonAsyncManage {
    private static Logger logger = Logger.getLogger(ProjectCommonAsyncManageImpl.class);
    @Autowired
    private ProjectROneService projectROneService;

    @Override
    @Async
    public void asynchroProjectWholeProcess(String projectId) {
        // 实时更新工程全流程报表项目部分中间表 by dy 2020-01-21
        logger.info("=======================异步执行同步项目信息开始==========================");
        projectROneService.synchroProjectWholeProcess(projectId);
        logger.info("=======================异步执行同步项目信息结束==========================");
    }
}

重新编译执行,测试成功.

方法2:在查怎样异步执行时查询到最多的是新起一个新的线程也能实现该操作,所以就各种百度了下

要用到Thread类 ,然后学习了下这个

最终百度的方法是

// 实时更新工程全流程报表项目部分中间表 by dy 2020-01-21
// projectCommonAsyncManage.asynchroProjectWholeProcess(projectId);
new Thread(new Runnable() {
    @Override
    public void run() {
        logger.info("=======================新线程执行同步项目信息开始==========================");
        projectROneService.synchroProjectWholeProcess(projectId);
        logger.info("=======================新线程执行同步项目信息结束==========================");
    }
}).start();

弊端:
1、每次new Thread新建对象性能差
2、线程缺乏统一管理,可能无限制新建线程,相互之间出现竞争,极可能占用过多系统资源导致死机或者oom。
3、缺乏更多功能,比如:定时定时执行,定期执行,线程中断。

版权声明:本文为CSDN博主「垚石」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/jinshitou2012/article/details/78543426

以上这段是直接在原更新项目状态的方法中直接使用的起一个新的线程,弊端已经列明了

 

然后问了下同事后,同事说其中一个方法执行报错时后期排查问题会很麻烦...

 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值