ThreadPoolExecutor
corePoolSize 核心线程池大小
maximumPoolSize 线程池最大容量大小
keepAliveTime 线程池空闲时,线程存活的时间
TimeUnit 时间单位
ThreadFactory 线程工厂
BlockingQueue任务队列
RejectedExecutionHandler 线程拒绝策略
submit(Callable--run()) 异步提交,有返回值,
execute(Runnable--call()) 异步提交,无返回值
invokeAll(Collection<? extends Callable<T>> tasks) 异步提交多组
FutureTask 任务执行结果进行取消、查询是否完成、获取结果
get() 阻塞等待线程返回结果
子任务调用run或者call会将任务存放到BlockingQueue等待线程消费
ForkJoinPool
submit(ForkJoinTask) 之类RecursiveTask 有返回结果 异步提交,有返回值,
execute(ForkJoinTask) 之类RecursiveAction 无返回结果 异步提交,无返回值
invoke(ForkJoinTask<T> task) 同步提交
ForkJoinTask
fork 开启子任务
join 等待并获取任务结果
子任务调用fork会将任务存放到ForkJoinWorkerThread等待线程消费
使用ForkJoinPool能够使用数量有限的线程来完成非常多的具有父子关系的任务,比如使用4个线程来完成超过200万个任务。但是,使用ThreadPoolExecutor时,是不可能完成的,因为ThreadPoolExecutor中的Thread无法选择优先执行子任务,需要完成200万个具有父子关系的任务时,也需要200万个线程,显然这是不可行的
https://www.cnblogs.com/congsg2016/p/5621746.html
https://blog.csdn.net/Holmofy/article/details/82714665
https://blog.csdn.net/dm_vincent/article/details/39505977
,