关于ForkJoin框架的一点小坑

一、使用ForkJoinPool执行ForkJoinTask,如果main方法中使用pool.execute(task);主函数中没有其他操作,会看不到task执行结果。        

        原因分析:

        1.execute是异步执行(不需要等待task执行完毕主函数就继续执行下面的语句);invoke是同步执行,主函数等待invoke执行完毕再继续执行。
        2.主线程是非守护线程,ForkJoinPool执行任务的线程是守护线程。主线程执行execute后没有等task完成就继续执行后续命令然后主线程结束,当程序中只有守护线程时jvm就会退出。
建议主线程执行execute后做判断while(!task.isDone()){System.out.println("任务执行中...");Thread.sleep(1000);}或者调用invoke,主线程阻塞等待task执行完成