ForkJoinPool与线程池

2,036 阅读1分钟

这只是一个零碎的笔记, 知识点很散

  1. forkJoinPool是一种特殊的线程池, 特别适合用于分治法的算法, 因为普通的线程池, 提交的task中, 不能往自己所在的线程池中提交子任务, 并等待子任务执行完成后继续向下执行, 但是ForkJoinPool利用ForkJoinTask的join和fork方法就很容易做到这一点. 所以他可以使用分治法的算法. 具体用法不多介绍, 看这篇文章吧 www.cnblogs.com/lixuwu/p/79…

先fork, 后join

  1. 线程池的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并不能阻塞主线程的执行, 所以上面那行打印并不能保证打印出来

  1. ForkJoinPool并不适用于高IO型的线程, 他适用于高计算型的算法