多线程与高并发(4)

Executor

一个接口,其定义了一个接收Runnable对象的方法execute

ExecutorService

是一个比Executor使用更广泛的子类接口,其提供了生命周期管理的方法,submit方法返回一个Future对象,并且可以传入Callable对象获取线程返回值

Callable

Callable的call方法带有返回值,Runnable的run没有返回值,而且Callable可以抛出异常

Future

Future也是一个接口,存储执行将来产生的结果

FutureTask

FutureTask实现于RunnableFuture接口,而RunnableFuture接口继承Runnable与Future接口。既是一个Runnable又可以存储线程执行结果

CompletableFuture

CompletableFuture可以管理多个Future的结果,并且提供了函数式编程,也提供了转换和组合 CompletableFuture 的方法。

线程池

维护2个队列,线程队列与任务队列

1.ThreadPoolExecutor

  1. corePoolSize:核心线程数
  2. MaxPoolSize:最大线程数
  3. KeepAliveTime:线程最大空闲时间
  4. TimeUnit:时间单位
  5. BlockingQueue:线程等待队列
  6. ThreadFactory:线程创建工厂
  7. RejectStrategy:拒绝策略

先消耗核心线程,如果核心线程都被占用,则进入线程等待队列,入队操作为原子性操作,队列满后,再创建非核心线程,如果非核心线程也全部被占用,则转入拒绝策略。

2.ForkJoinPoll

  • 分解汇总的任务
  • 用很少的线程可以执行很多的任务(子任务)TPE做不到先执行子任务
  • CPU密集型

Executors - 线程池工厂

  1. SingleTgreadExecutor:保证线程顺序执行
  2. CachedThreadPool:最大线程数为Integer.MAX_VALUE,线程队列SynchronousQueue,如果队列中的线程不被消费会阻塞,corePoolSize为0表示线程全部为非核心线程,KeepAliveTime值为60秒未使用将被回收
  3. FixedThreadPool:固定大小的线程池,corePoolSize与MaxPoolSize值相等,表示全部为核心线程不会被回收
  4. ScheduledThreadPool:内部使用DelayedWorkQueue实现
  5. WorkStealingPool:工作窃取线程池,本质上是ForkJoinPool实现,
  6. ForkJoinPool:主要用于实现“分而治之”的算法,RecursiveTask带返回值 RecursiveAction不带返回值
posted @ 2020-10-29 00:11  R.困兽  阅读(56)  评论(0编辑  收藏  举报