并发编程之线程池

一、线程池简介

1.线程池状态

1)Running:运行中

2)ShuttingDown:关闭中

3)Termitnaed:已关闭

2.线程池是进程级的重量级资源。生命周期默认和JVM一致。

3.线程池优缺点 线程复用机制

  1)降低系统资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的消耗。

  2)提高响应速度。当任务到达时,任务可以不需要等到线程创建就能立即执行。

  3)提高线程的可管理性。

二、线程池的接口

1.executor:void execute(Runnable) 启动线程任务。线程池顶级接口。唯一方法:execute()

调用者提供runnable接口的实现,线程池通过线程执行这个runnable。

2.executorService

void execute(Runnable)、Future submit(Callable)、Future submit(Runnable)。

3.Future:线程执行结束后的结果。

get():获取结果

4.Callable:可执行接口。有返回值和异常。

5.Executors

工具类型,为Executor线程池提供工具方法。可以快速提供几种线程池。

开始:创建线程池

结束:jvm关闭或调用shutdown并处理完所有任务。

三、四种线程池

1.FixedThreadPool:容量固定的线程池。推荐

   1)BlockingQueue<Runnable>:任务队列。

       当任务数量大于线程池容量时,没有运行的任务保存在任务队列中。

       当有空闲线程时,自动从任务队列取出任务执行。

 2)queued.tasks:任务队列。

   completed.tasks:结束任务队列。计数

2.CachedThreadPool:缓存线程池。

  1)自动扩容。

  2)默认线程空闲60s自动销毁。

  应用场景:内部或测试应用。

3.ScheduledThreadPool:计划任务线程池。

  1)根据计划自动执行任务的线程池。定时完成任务。

  2)阻塞式。

  应用场景:计划任务时选用(DelaydQueue)。

4.SingleThreadExecutor:单一容量的线程池。

 应用场景:保证任务顺序时选用。游戏中的喇叭,秒杀。

四、线程池面试问题

 1.线程池工作流程 核心线程数  最大线程数 队列 拒绝策略等

简单总结下线程池之间的参数协作分为以下几步:
  1. 线程优先向 CorePool 中提交;
  2. 在 Corepool 满了之后,线程被提交到任务队列,等待线程池空闲;
  3. 在任务队列满了之后 corePool 还没有空闲,那么任务将被提交到 maxPool 中,如果 MaxPool 满了之后执行 task 拒绝策略。

 

posted @ 2019-08-10 22:02  遇见神龙  阅读(158)  评论(0编辑  收藏  举报