嗯,这确实是一个比较经典的话题。以前听到多线程基本上就已经吓得尿裤子了,但是! 敲黑板了啊 画重点了啊。就在这个月我自己动手写出来了人生中第一个多线程的案例,并且完美解决了业务需要问题。将几百万的数据从一个表取出来 经过处理和再添加到另个表中 。那么我们来撩一撩这个业务的前世今生!
之前已经写过了定时任务的数据压缩 但是那只是压缩一天的,那么从最开始上线到现在会有几个月的数据没有进行压缩,因此最开始我想的是将之前所有天数的数据循环进行压缩,但是这又有一个问题,压缩每一天的数据都会需要几十秒的时间,我要同时压缩几个月的,那将是一段很漫长的过程。所以这个时候,我想到了用多线程的方式执行压缩任务。开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(