实现三个异步线程同时计算(1到100的和),高斯7岁都能口算的题目。哪个线程先返回,就结束多线程。
代码如下:
package com.itheima.threadexecutor;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.*;
/**
* @Author: liminghui
* @Date: 2020/7/9 21:04
* @Version:
* @Description:
*/
public class FutureTask0 {
public static void main(String[] args) throws ExecutionException, InterruptedException {
int result = 0;
ExecutorService executor = Executors.newCachedThreadPool();
List<FutureTask<Integer>> futureTaskList = new ArrayList<>();
for (int i = 0; i < 3; i++) { // 三个线程
FutureTask<Integer> futureTask = new FutureTask<Integer>(new Callable<Integer>() {
@Override
public Integer call() throws Exception {
int sum = 0;
for (int i = 1; i <= 100; i++) {
sum += i;
}
return sum;
}
});
executor.submit(futureTask);
futureTaskList.add(futureTask);
}
int count = 1;
w1:
while (true) {
count++;
for (int i = 0; i < futureTaskList.size(); i++) {
if (futureTaskList.get(i).isDone()) {
// 处理业务逻辑,结束循环
result = futureTaskList.get(i).get();
System.out.println("共有" + (futureTaskList.size()) + "个线程;第" + (i + 1) + "个线程先完成求和功能!结果为:" + result);
executor.shutdown();
break w1;
}
}
}
System.out.println("while循环了" + count + "次!");
}
}