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
,