设置线程池,多线程执行完毕,再执行主线程
package com.dl.thread;
import java.util.concurrent.*;
public class Demo_2 {
public static void main(String[] args) throws ExecutionException, InterruptedException {
ExecutorService executor = Executors.newFixedThreadPool(10);
int sum = 0;
Task2 task = new Task2();
for (int i = 1; i <= 100; i++) {
task.setI(i);
Future<Integer> result = executor.submit(task);
sum=sum+result.get();
System.out.println("i: "+i+" , task运行结果"+sum);
}
executor.shutdown();
try {
Thread.sleep(1);
} catch (InterruptedException e1) {
e1.printStackTrace();
}
System.out.println("主线程在执行任务");
System.out.println("所有任务执行完毕");
}
}
class Task2 implements Callable<Integer> {
private int i;
public int getI() {
return i;
}
public void setI(int i) {
this.i = i;
}
public Task2() {
}
public Task2(int i) {
this.i = i;
}
@Override
public Integer call() throws Exception {
System.out.println("子线程在进行计算");
Thread.sleep(10);
String name = Thread.currentThread().getName();
System.out.println(name+" "+i+", "+i );
return i-1;
}
}