这只是一个零碎的笔记, 知识点很散
- forkJoinPool是一种特殊的线程池, 特别适合用于分治法的算法, 因为普通的线程池, 提交的task中, 不能往自己所在的线程池中提交子任务, 并等待子任务执行完成后继续向下执行, 但是ForkJoinPool利用ForkJoinTask的join和fork方法就很容易做到这一点. 所以他可以使用分治法的算法. 具体用法不多介绍, 看这篇文章吧 www.cnblogs.com/lixuwu/p/79…
先fork, 后join
- 线程池的shotdown方法并不能阻塞线程, 所以类似于如下的代码, 并不能保证完全执行到
public static void main(String[] args) throws InterruptedException {
ForkJoinPool pool = new ForkJoinPool();
pool.execute(() -> System.out.println("this is fork task"));
// pool.awaitTermination(2, TimeUnit.DAYS);
pool.shutdown();
}
如上面的算法, shutdown并不能阻塞主线程的执行, 所以上面那行打印并不能保证打印出来
- ForkJoinPool并不适用于高IO型的线程, 他适用于高计算型的算法