特点:方法1中异步执行方法2
应用场景:爬虫方法爬取银行支付数据时,当爬取到新数据时,应当异步通知对账比较器去比较待支付的订单是否能匹配上新爬取的数据,这样即不影响爬虫的实时性,又不影响用户待支付订单检查的实时性
1 使用线程池实现异步功能
(1)配置一个线程对象
@Configuration
public class CSCExecutorConfig {
@Bean
public ThreadPoolTaskExecutor cscOnePoolCompareTaskExecutor(){
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
executor.setCorePoolSize(5);
executor.setMaxPoolSize(10);
executor.setQueueCapacity(100);
executor.setKeepAliveSeconds(300);
executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
return executor;
}
}
(2)注入这个线程池,将异步方法提交给线程池
public class Spider {
@Autowired
private ThreadPoolTaskExecutor cscOnePoolCompareTaskExecutor;
void spider(){
// 爬虫的业务方法
cscOnePoolCompareTaskExecutor.execute(new Runnable() {
@Override
public void run() {
try{
cscCompareResultProcessor.doSingleCSCApplyCompare(cscApply);
}catch (Exception e){
e.printStackTrace();
}
}
});
}
}
其中,cscCompareResultProcessor.doSingleCSCApplyCompare(cscApply)是执行另外一个对象的方法
(3)小结:实现一个异步触发执行其它方法功能,并且显示指定了线程池的大小等属性,比较清晰