使用Callable返回运算结果,并且将运算结果报错到FutureTask中,再将FutureTask放到一个List集合中,最后将List中每个FutureTask对应保存的线程的运算结果相加。
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.FutureTask;
public class Test3 {
public static void main(String[] args) throws ExecutionException, InterruptedException {
Test3 test3 = new Test3();
List<FutureTask> list=new ArrayList<>();
for (int i = 0; i <10 ; i++) {
FutureTask<Integer> integerFutureTask = new FutureTask<>(new MyCallable(i*10+1, (i+1) * 10));
new Thread(integerFutureTask).start();
list.add(integerFutureTask);
}
int sum=0;
for (int i=0;i<list.size();i++){
Integer o = (Integer)list.get(i).get();
sum+=o;
}
System.out.println(sum);
}
}
class MyCallable implements Callable<Integer>{
int start=0;
int end =0;
public MyCallable(int start, int end) {
this.start = start;
this.end = end;
}
@Override
public Integer call() throws Exception {
System.out.println("start==="+start+" end ==="+end);
int sum=0;
for (int i= start;i<=end;i++){
sum+=i;
}
return sum;
}
}