计算 控制台循环10次 0-100000000共需要多长时间;
1,线程池配置类
参阅前篇
2,service
Future<String> sayAgin10000();
3,Impl
@Override
@Async
public Future<String> sayAgin10000() {
for (int i = 0; i < 100000000; i++) {
if(i==99999999){
System.out.println("---:"+i);
}
}
return new AsyncResult<>("OK");
}
4,controller 调用
@GetMapping("/sayAgin10000")
public JSONObject sayAgin10000(){
JSONObject jsb = new JSONObject();
long s = System.currentTimeMillis();
List<Future<String>> list = new ArrayList<>();
for (int i = 0; i < 10; i++) {
System.out.println("执行第"+i+1+"遍!");
list.add(userService.sayAgin10000());
}
for (Future<String> f:list){
try {
//获取每个执行结果
String s1 = f.get();
System.out.println("获得结果:"+s1);
} catch (InterruptedException e) {
e.printStackTrace();
} catch (ExecutionException e) {
e.printStackTrace();
}
}
long e = System.currentTimeMillis();
System.out.println("所有任务执行完成!共耗时"+(e-s)+"毫秒!");
jsb.put("msg","sucess!");
return jsb;
}
备注:
开始设置循环次数为 10000, 在方法实现上加不加 @Async 注解,耗时差距都不大,甚至有几次不加注解的返回更快些。循次数加大后,在加了@Async 异步注解后,优势就体现出来了。
当前数据量:加@Async异步注解,耗时300毫秒,不加@Async异步注解在1500毫秒;