JAVA线程池
JAVA线程池分两种:
1.ThreadPoolExecutor
2.ForiJoinPool
(也有人说分为什么single,cache,workstealing等,他们底层其实都是new的这两种线程池)
ThreadPoolExecutor
ThreadPoolExecutor线程池内部维护了一个线程池集合(HashSet),和一个任务队列(queue)。
多个线程不断的从queue中拿任务来执行。
ForkJoinPool
*
* @since 1.7
* @author Doug Lea
*/
@sun.misc.Contended
public class ForkJoinPool extends AbstractExecutorService {}
ForkJoinPool是java从1.7提供的来支持将一个任务拆分成多个“小任务”并行计算,再把多个“小任务”的结果合并成总的计算结果。
ForkJoinPool的submit方法返回值为ForkJoinTask类型
public <T> ForkJoinTask<T> submit(Callable<T> task) {
ForkJoinTask<T> job = new ForkJoinTask.AdaptedCallable<T>(task);
externalPush(job);
return job;
}
ForkJoinTask
public abstract class ForkJoinTask<V> implements Future<V>, Serializable {.....}
ForkJoinTask是ForkJoinPool执行完任务后接收返回值。
线程池大体了解就是这些。下一篇开始从源码分析ThreadPoolExecutor,进一步加深对线程池的了解。