ForkJoinPool的fork()方法做了什么事?
程序员文章站
2022-06-09 19:02:23
先看看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
上一篇: Fragment完全总结
下一篇: java中通过行为参数化传递代码方案