记录两种多线程,带返回值以及不带返回值(异步)多线程
1 @Async()
可以指定线程池,建议指定线程池 ,方法调用处和方法不能在同一个类,不然不生效
@Async("batchTaskExecutor")
public void batchSendMessage() {
// 这是方法体
}
---------------------------------------------------------------------------------------------
// 根据线程池拆分任务条数
List<List<UserDTO>> partition = Lists.partition(userDTOS, 1000);
for (List<UserDTO> list : partition) {
// 调用出
userService.batchSendMessage();
}
2.使用callable实现带返回值的
// 获取线程池
ThreadPoolTaskExecutor threadPoolTaskExecutor = this.threadPoolTaskExecutor.taskExecutor();
// 返回id记录容器
List<String> ids=new ArrayList<>();
Future submit=null;
for (int i = 0; i < illionExcl.size(); i++) {
submit = threadPoolTaskExecutor.submit(new ExportIllionFilesDevCallable(illionExcl.get(i), i, illionExcl,illionFilesExportService));
Object o = submit.get();
if (o!=null){
ids.add(o.toString());
}
}
while (!submit.isDone()){
}
需要实现Callable
public class ExportIllionFilesDevCallable implements Callable {
private IllionFilesExportDTO illionExcl;
private List<IllionFilesExportDTO> illionExcls;
private int index;
private static final String FILE_PATH="/data/files/";
private static final String FILE_PATH_DEV="/data/wwwroot/";
private IllionFilesExportService illionFilesExportService;
@Override
public Object call() throws IOException {
String jsonFileUrl = illionExcl.getJsonFileUrl();
String jsonDecodeKey = illionExcl.getJsonDecodeKey();
Long createDate = illionExcl.getCreatedDate();
Long jsonFileLength = illionExcl.getJsonFileLength();
String htmlFileName = illionExcl.getHtmlFileName();
String jsonFileName = illionExcl.getJsonFileName();
Long id = illionExcl.getId();
if (createDate!=null){
return id;
}
int i=illionFilesExportService.updateIllionFilesExportStatus(id, StaticDataEnum.ILLION_FILES_EXPORT1.getCode());
return null;
}
public ExportIllionFilesDevCallable(IllionFilesExportDTO illionExcl, int i, List<IllionFilesExportDTO> illionExcls,IllionFilesExportService illionFilesExportService){
this.illionExcl=illionExcl;
this.illionExcls=illionExcls;
this.index=i;
this.illionFilesExportService=illionFilesExportService;
}
}