Main函数:
public static void main(String[] args) {
ForkJoinPool forkJoinPool = new ForkJoinPool();
List list = new ArrayList();
for (int i = 0; i < 100; i++) {
list.add(i);
}
TestTask task = new TestTask(list);
forkJoinPool.invoke(task);
System.out.println("task 完成:" + task.isDone());
System.out.println(System.currentTimeMillis() + " - Main: The program has finished");
}
任务类:
public class TestTask extends RecursiveAction {
private List list;
private final int limit = 10;
public TestTask(List list) {
this.list = list;
}
@Override
protected void compute() {
if (list.size() <= limit) {
System.out.println(System.currentTimeMillis() + " - " + list);
} else {
int middle = (list.size()) /2;
TestTask left = new TestTask(list.subList(0, middle));
TestTask right = new TestTask(list.subList(middle, list.size()));
//子任务用了异步
left.fork();
right.fork();
}
}
}
如果在main函数中,使用execute执行任务,main线程结束,程序就结束了,控制台没有任何的任务输出。
如果在main函数中,使用invoke执行任务,main线程结束,程序没有立即结束,控制台有任务输出,但是任务没有全部执行完成。
这是怎么回事?