异步任务创建见上一章 链接
异步任务Future获取结果
注意:
要把异步任务封装到类里面,不能直接写到Controller
增加Future 返回结果 AsyncResult(“task执行完成”);
如果需要拿到结果 需要判断全部的 task.isDone()
代码:
AsyncTask
@Component
@Async
public class AsyncTask {
//泛型里面填写自己想要返回的数据类型
//AsyncResult用于封装异步任务的结果
public Future<String> task4(){
try {
Thread.sleep(4000L);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("task4");
return new AsyncResult<String>(" task4");
}
public Future<String> task5(){
try {
Thread.sleep(4000L);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("task5");
return new AsyncResult<String>(" task5");
}
}
测试方法:
@Autowired
private AsyncTask asyncTask;
@GetMapping("async")
public JsonData testAsync(){
long begin=System.currentTimeMillis();
Future<String> task4=asyncTask.task4();
Future<String> task5=asyncTask.task5();
for (;;){
if (task4.isDone()&&task5.isDone()){
String task4Result= null;
String task5Result= null;
try {
task4Result = task4.get();
System.out.println(task4Result);
task5Result=task5.get();
System.out.println(task5Result);
} catch (InterruptedException e) {
e.printStackTrace();
} catch (ExecutionException e) {
e.printStackTrace();
}finally {
break;
}
}
}
long end=System.currentTimeMillis();
return JsonData.buildSuccess(end-begin);
}
测试结果:
如果不是异步执行则需要8秒