项目中哪里用到了多线程?

博主分享了自己首次成功运用多线程解决业务问题的经历。面对需要将大量历史数据进行处理和迁移的挑战,通过开启多个线程并利用线程池,将原本可能耗时很长的任务在30秒内高效完成,显著提升了工作效率。
摘要由CSDN通过智能技术生成

    嗯,这确实是一个比较经典的话题。以前听到多线程基本上就已经吓得尿裤子了,但是! 敲黑板了啊 画重点了啊。就在这个月我自己动手写出来了人生中第一个多线程的案例,并且完美解决了业务需要问题。将几百万的数据从一个表取出来 经过处理和再添加到另个表中 。那么我们来撩一撩这个业务的前世今生!

  之前已经写过了定时任务的数据压缩 但是那只是压缩一天的,那么从最开始上线到现在会有几个月的数据没有进行压缩,因此最开始我想的是将之前所有天数的数据循环进行压缩,但是这又有一个问题,压缩每一天的数据都会需要几十秒的时间,我要同时压缩几个月的,那将是一段很漫长的过程。所以这个时候,我想到了用多线程的方式执行压缩任务。开10个线程分别去压缩一天任务,然后通过循环将天数进行累加,交给多线程去执行,最后三个月的压缩完毕之后,仅仅用了30秒不到。

上代码:

@Service
@Transactional
public class TenminuteTaskDataCompressionService {

    private final Logger log = LoggerFactory.getLogger(TenminuteTaskDataCompressionService.class);

    private final TenminuteTaskDataCompressionRepository tenminuteTaskDataCompressionRepository;

    @Autowired
    TenminuteTaskRepository tenminuteTaskRepository;

    private ThreadPoolExecutor executor = new ThreadPoolExecutor(10, 20, 2000, TimeUnit.MILLISECONDS,
        new LinkedBlockingDeque<Runnable>(1000));

    public TenminuteTaskDataCompressionService(TenminuteTaskDataCompressionRepository tenminuteTaskDataCompressionRepository) {
        this.tenminuteTaskDataCompressionRepository = tenminuteTaskDataCompressionRepository;
    }
public int excuteDataCompressionByOperateDate(String operateDate,String deleteFlag) {
        log.debug("the request param is :{}",operateDate,deleteFlag);
        //传1异常压缩 先删压缩表当天数据再压缩
        if("1".equals(
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值