项目最近要优化一下项目的定时采集功能,由之前的单线程采集升级为多线程异步执行,下面做个实现的介绍:
先看一下单线程的效果:
执行结果:
解释一下:小明由三个女朋友需要处理,每个女朋友都需要处理6秒, 每次过了三秒就需要再次处理一下三个女朋友(年轻真好!),但是这样小明也顶不住啊,所以如图所示:因为是一个线程所以小明只能一个个处理了,每个都处理了6秒钟。
多线程改造:
首先看看项目的连接池
再来看看:多线程执行的关键,ThreadPoolTaskScheduler,看看官方的说法JavaBean that allows for configuring a ThreadPoolExecutor
in bean style (through its "corePoolSize", "maxPoolSize", "keepAliveSeconds", "queueCapacity" properties) and exposing it as a Spring TaskExecutor
.
大意就是说 :ThreadPoolTaskScheduler是一个任务调度的线程池,有一些属性。。。
这时候方法或者类上面要加个注解
结果可以看到:每个任务都完成了异步执行,就是说不用等待线程执行完,再执行下一个任务;而是每隔2秒执行一次任务,只不过是换了个线程运行,因为上个线程需要执行6秒,小明已经等不及了每隔两秒就要处理女朋友。
spring确实很牛,把jdk和其他组件集成到一起,并且做了封装加强。本人菜鸟,有什么可以提出,相互交流