ThreadPoolExecutor,ForkJoinPool

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章