FutureTask 是对Future 的实现类
FutureTask 可以取消任务,并且可以获取任务执行结果
package com.jysemel.java.future;
import lombok.SneakyThrows;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.*;
public class FutureTaskDemo {
@SneakyThrows
public static void main(String[] args) {
List<FutureTask<Integer>> taskList = new ArrayList<>();
ExecutorService execute = Executors.newScheduledThreadPool(2);
for (int i = 0; i < 5; i++) {
FutureTask<Integer> task = new FutureTask<>(new ComputeTask(i, "" + i));
taskList.add(task);
execute.submit(task);
System.out.println("所有计算任务提交完毕, 主线程接着干其他事情!");
}
int result = 0;
for (FutureTask<Integer> future : taskList) {
int temp = future.get();
System.out.println("子任务结果=" + temp);
result = result + temp;
}
System.out.println("结果合计=" + result);
}
static class ComputeTask implements Callable<Integer> {
private Integer result = 0;
private String taskName = "";
ComputeTask(Integer result, String taskName) {
this.result = result;
this.taskName = taskName;
System.out.println("生成子线程计算任务: " + taskName);
}
@Override
public Integer call() throws Exception {
for (int i = 0; i < 10; i++) {
result += i;
}
Thread.sleep(TimeUnit.SECONDS.toMillis(5));
System.out.println("子线程计算任务: " + taskName + " 执行完成!");
return result;
}
}
}
代码