CompletionService 可以一边处理已完成的任务,一遍产生新任务,可以解决Future的缺点。
CompletionService<Boolean> service = new ExecutorCompletionService<>(threadPoolExecutor);
service.submit();
//获取boolean时take()获取的future先完成的先返回,没有按执行顺序返回,而Future按执行顺序返回,浪费时间
boolean b = service.take().get();
//获取上一个已完成的任务,没有则返回null
service.poll();
//在3秒内获取上一个已完成的任务,没有则返回null
service.poll(3, TimeUnit.SECONDS);