ForkJoinPool的fork()方法做了什么事?

先看看fork()方法的源码,如下:

public final ForkJoinTask<V> fork() {
    //定义一个线程实例属性t
    Thread t;
    //取得当前线程实例赋值给t,然后判断该线程是否是ForkJoinWorkerThread类型
    if ((t = Thread.currentThread()) instanceof ForkJoinWorkerThread)
        //如果是,则把该任务加入到当前线程的工作队列中
        ((ForkJoinWorkerThread)t).workQueue.push(this); 
    else
        //否则把该任务加入到默认common线程池中
        ForkJoinPool.common.externalPush(this);
    return this;
}

总结

所以fork()方法的主要作用就是把任务加入到当前线程的工作队列中,同时只有显式的创建ForkJoinPool线程池,才能使用到默认的工厂类,才能创建出ForkJoinWorkerThread类型的线程,而像Java8的并行流,用的虽然也是ForkJoinPool线程池,但是默认使用的是common线程池。

猜你喜欢

转载自blog.csdn.net/weixin_38106322/article/details/107609187