Executor->ExecutorService->ThreadPoolExecutor
Callable类似于Runnable,但是有返回值,前者一般配合线程池使用
Future,存储将来才会产生的结果
FutureTask,实现了Future和Runnable接口。
CompletableFuture,提供了很多管理 FutureTask的方法。
两种线程池:
1.ThreadPoolExecutor, 常用,多个线程共享一个等待队列,自定义线程池一般要设置7个参数。
2.ForkJoinPoll,分解汇总的任务,每一个线程都有自己单独的等待队列,CPU密集型。用很少的线程可以执行很多的任务/子任务,ThreadPoolExecutor做不到先执行子任务。ForkJoinTask/RecursiveAction/RecursiveTask是其执行的任务,fork()分叉出子任务,join()汇总任务。
WorkStealingPoll,基于ForkJoinPoll包装而来,,当一个线程执行完它自己队列的任务时 ,则会去其他线程的队列里偷任务
ParallelStram,并行流,也是基于ForkJoinPoll。