欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  科技

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

程序员文章站 2021-12-29 11:52:25
先看看fork()方法的源码,如下:public final ForkJoinTask fork() { //定义一个线程实例属性t Thread t; //取得当前线程实例赋值给t,然后判断该线程是否是ForkJoinWorkerThread类型 if ((t = Thread.currentThread()) instanceof ForkJoinWorkerThread) //如果是,则把该任务加入到当前线程的工作队列中...

先看看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线程池。

本文地址:https://blog.csdn.net/weixin_38106322/article/details/107609187

相关标签: Java并发编程