直接上代码:
public class ExecutorsCalculate {
static int[] nums = new int[1000];
static Random random = new Random();
static int sums;
static {
for (int i = 0; i < nums.length; i++) {
nums[i] = random.nextInt(10);
}
}
static class SumTask implements Callable<Integer> {
int startNumber, endNumber;
SumTask(int startNumber, int endNumber) {
this.startNumber = startNumber;
this.endNumber = endNumber;
}
@Override
public Integer call() throws Exception {
int sum = 0;
for (int i = startNumber; i < endNumber; i++) {
for (int j = 0; j < nums.length; j++) {
sum = nums[j]+sum;
}
}
System.out.println("from:"+startNumber+"to"+endNumber+"的和是"+sum);
return sum;
}
}
public static void main(String[] args) {
ThreadPoolExecutor executor = (ThreadPoolExecutor) Executors.newCachedThreadPool();
List<Future<Integer>> resultList = new ArrayList<>();
// 分成8个任务计算,提交任务
for (int i = 0; i < 8; i++) {
SumTask calculator = new SumTask(i * 1250 + 1, (i + 1) * 1250);
Future<Integer> result = executor.submit(calculator);
resultList.add(result);
}
BigInteger aBigInteger = null;
BigInteger bBigInteger = null;
for (int i = 0; i < resultList.size(); i++) {
Future<Integer> result = resultList.get(i);
Integer sum = null;
try {
sum = result.get();
aBigInteger = new BigInteger(String.valueOf(sum));
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ArrayIndexOutOfBoundsException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}catch (ExecutionException e) {
// TODO: handle exception
e.printStackTrace();
}
bBigInteger = aBigInteger.add(aBigInteger);
}
System.out.printf("总和是" + bBigInteger);
// 关闭线程池
executor.shutdown();
}
}