zoukankan      html  css  js  c++  java
  • 并发编程之线程池

    一、线程池简介

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

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

  • 相关阅读:
    转载 cglib代理和java代理
    解决流不能重复使用
    @RestController的方法中 路径参数带.(点号)配置
    Spring中application*的使用
    转载自用学习 侵权删
    转载学习 多线程中的内存模型和关键字
    转载 幂等的使用
    转载学习 关于线程池
    FastJSON 转换List<T> ,Map<T,T>泛型失败 处理方法
    quartz报错 Couldn't retrieve job because the BLOB couldn't be deserialized: null
  • 原文地址:https://www.cnblogs.com/wenxiangchen/p/11333191.html
Copyright © 2011-2022 走看看