创建 配置 初始化 线程池
ThreadPoolTaskExecutor executorServer = new ThreadPoolTaskExecutor();
//表示线程池核心线程,正常情况下开启的线程数量。
executorServer.setCorePoolSize(5);
//配置队列大小
executorServer.setQueueCapacity(500);
//当核心线程都在跑任务,还有多余的任务会存到此处。
executorServer.setMaxPoolSize(5);
//非核心线程的超时时长,超长后会被回收
executorServer.setKeepAliveSeconds(60);
//用来设置线程池关闭的时候等待所有任务都完成再继续销毁其他的Bean
executorServer.setWaitForTasksToCompleteOnShutdown(true);
//初始化线程池
executorServer.initialize();
使用线程池
//利用List储存future
ArrayList<Future> arrFuture = new ArrayList<>();
try {
Future fbusinessUrl = executorServer
.submit(new GetURL(pictureService, base64businessUrl));
arrFuture.add(fbusinessUrl);
Future flegalFrontUrl = executorServer
.submit(new GetURL(pictureService, base64legalFrontUrl));
arrFuture.add(flegalFrontUrl);
} catch (InterruptedException e) {
System.out.print(e);
} catch (ExecutionException e) {
System.out.print(e);
} finally {
executorServer.shutdown();
}
GetUrl实现Callable接口 重写call()方法 [传值型]
import java.util.concurrent.Callable;
public class GetURL implements Callable {
String base64URL;
PictureService pictureService;
public GetURL(PictureService pictureService, String base64URL) {
this.pictureService = pictureService;
this.base64URL = base64URL;
}
@Override
public String call() throws Exception {
String URL = null;
if (StringUtils.isEmpty(base64URL)){
return null;
}
try {
URL = pictureService
.upload(BASE64DecodedMultipartFileUtil
.base64ToMultipart(base64URL));
} catch (Exception e) {
e.printStackTrace();
return URL;
}
return URL;
}
}