wuqiu-ai / daily-interviews

java面试之每日一练
0 stars 0 forks source link

[基础] 第13天 线程池有哪些类型 2020-09-08 #78

Open wuqiu-ai opened 4 years ago

wuqiu-ai commented 4 years ago

线程池有哪些类型?

wuqiu-ai commented 4 years ago
  1. Executors.newFixedThreadPool(int nThreads)

    指定线程数的线程池

  2. Executors.newCachedThreadPool()

    处理大量短时间工作任务的线程池; 试图缓存线程并重用,当无缓存线程可用时,就会创建新的工作线程; 如果线程闲置的时间超过阀值,则会被终止移除缓存; 系统长时间闲置的时候,不会消耗资源;

  3. Executors.newSingleThreadExecutor()

    创建唯一的工作线程来执行任务,如果线程异常,会有另一个线程取代;

  4. Executors.newSingleThreadScheduledExecutor()与newScheduledThreadPool(int corePoolSize)

    定时或者周期性工作调度,两者的区别在于单一工作线程还是多个线程;

  5. Executors.newWorkStealingPool()

    内部会构建ForkJoinPool,利用working-stealing算法,并行处理任务,不保证处理顺序;

Fork-Join框架

  1. 把大任务拆分为小任务并行执行,最终汇总每个小任务结构汇总得到大任务结果的框架;
  2. 工作窃取,双端队列

为什么要使用线程池

  1. 降低资源消耗
  2. 提供线程的可管理性