1 测试类-FetureTest
package com.sqq.future;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
/**
* @description: Future模式计算1到1亿的和
* @author: shiqiangqiang
* @createDate: 2020/6/21
* @version: 1.0
*/
public class FetureTest {
/**
* Future模式计算1到1亿的和
* @param args
*/
public static void main(String[] args) {
long start = System.currentTimeMillis();
ExecutorService executorService = Executors.newCachedThreadPool();
List<Future<Integer>> futureList = new ArrayList<>();
// 计算1000次1至1亿的和
for (int i=0; i<1000; i++){
// 调度执行
futureList.add(executorService.submit(new Calc()));
}
System.out.println("耗时: " + (System.currentTimeMillis() - start));
for (int i = 0; i < 1000; i++) {
try {
Integer result = futureList.get(i).get();
System.out.println("第" + i + "个结果: " + result + ", 到第"+i+"个总耗时: " + (System.currentTimeMillis() - start));
} catch (InterruptedException | ExecutionException e) {
e.printStackTrace();
}
}
System.out.println("计算总耗时: " + (System.currentTimeMillis() - start));
executorService.shutdown();
}
}
2 Callable实现类
package com.sqq.future;
import java.util.concurrent.Callable;
/**
* @description: 计算类
* @author: shiqiangqiang
* @createDate: 2020/6/21
* @version: 1.0
*/
public class Calc implements Callable<Integer> {
@Override
public Integer call() throws Exception {
return cal(100000000);
}
/**
* 计算一个亿的和
* @param num
* @return
*/
public static int cal (int num) {
int sum = 0;
for (int i = 0; i < num; i++) {
sum += i;
}
return sum;
}
}
网友评论