并发编程之线程池

一、线程池简介

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:单一容量的线程池。

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

原文地址:https://www.cnblogs.com/wenxiangchen/p/11333191.html