之前有学习过这个框架的使用,稍微回顾一下:
初始化一个ForkJoinPool
定义task或action
使用pool来执行task或action
这里初始化ForkJoinPool 采用如下方法:
public final static ForkJoinPool mainPool = new ForkJoinPool();
首先分析一下初始化做了些什么。
public ForkJoinPool() {
this(Runtime.getRuntime().availableProcessors(),
defaultForkJoinWorkerThreadFactory, null, false);
}
这里调用了另外一个constructor.其中defaultForkJoinWorkerThreadFactory 这个是什么呢?
public static final ForkJoinWorkerThreadFactory
defaultForkJoinWorkerThreadFactory;
static class DefaultForkJoinWorkerThreadFactory
implements ForkJoinWorkerThreadFactory {
public ForkJoinWorkerThread newThread(ForkJoinPool pool) {
return new ForkJoinWorkerThread(pool);
}
}
public static intece ForkJoinWorkerThreadFactory {
/**
* Returns a new worker thread operating in the given pool.
*
* @param pool the pool this thread works in
* @throws NullPointerException if the pool is null
*/
public ForkJoinWorkerThread newThread(ForkJoinPool pool);
}
DefaultForkJoinWorkerThreadFactory 是一个静态内部类,其中返回了一个ForkJoinWorkerThread对象。ForkJoinWorkerThreadFactory 是一个intece。仅仅到这里的话,肯定会报错,因为defaultForkJoinWorkerThreadFactory 还没有初始化呢。继续查找代码,这个代码写的真孙子,ForkJoinPool 这个类最下面有一个static block。在这里初始化了一个defaultForkJoinWorkerThreadFactory .
defaultForkJoinWorkerThreadFactory =
new DefaultForkJoinWorkerThreadFactory();
到这里其实只是初始化了一个ForkJoinWorkerThread,还是要调用defaultForkJoinWorkerThreadFactory.newThread(ForkJoinPool pool)方法才行。forkjoinpool
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-40528-1.html
所以他要显示他的力量
狼真的来了
嫖娼