最近一直学习多线程知识苦于没有机会运用到实际项目中,不过今天接到一个需求:请求发送多个第三方api请求,组合这些请求的返回结果返回给前端调用。如果说写for循环,单个请求结束后再继续调用下一个请求(自己想一想都蠢)。实在是体验效果不佳,需要优化api请求查询时间。
这里就能采用多线程异步请求多个Api,拿到所有结果后组合返回即可。话不多说,show code!
@Test
public void testThread2() {
// 用来计算请求时间哒
LocalDateTime beginTime = LocalDateTime.now();
// ExecutorService fixPool = Executors.newFixedThreadPool(8);
// 使用线程池而不是直接创建线程,这是因为创建线程代价很高,线程池可以有效地利用有限的线程来启动任务。
// 手动创建线程池
ThreadFactory namedThreadFactory = new ThreadFactoryBuilder()
.setNameFormat("video-pool-%d").build();
ExecutorService fixPool = new ThreadPoolExecutor(8, 10,
0L, TimeUnit.MILLISECONDS,
new LinkedBlockingQueue<>(1024), namedThreadFactory, new ThreadPoolExecutor.AbortPolicy());
List<String>