• 线程池有几种创建方式?



    程序员的公众号:源1024获取更多资料,无加密无套路!

    最近整理了一波电子书籍资料,包含《Effective Java中文版 第2版》《深入JAVA虚拟机》,《重构改善既有代码设计》,《MySQL高性能-第3版》,《Java并发编程实战》等等
    获取方式: 关注公众号并回复 电子书 领取,更多内容持续奉上


    线程池的创建方式主要有以下几种:

    • Executors.newFixedThreadPool:创建一个固定大小的线程池,可控制线程最大并发数,超出的线程会在队列中等待;

    • Executors.newCachedThreadPool:创建一个可缓存的线程池,若线程数超过处理需要,缓存一段时间后会回收,若线程数不够,则新建线程;

    • Executors.newSingleThreadExecutor:它只会用唯一的工作线程来执行任务,保证所有任务按照指定顺序(FIFO, LIFO, 优先级)执行

    • Executors.newScheduledThreadPool:创建一个可以执行定时或周期性任务的线程池;

    • Executors.newSingleThreadScheduledExecutor:创建一个单线程的可以执行延迟任务的线程池;

    • Executors.newWorkStealingPool:创建一个抢占式执行的线程池(任务执行顺序不确定)。

    • ThreadPoolExecutor:最原始的创建线程池的方式,主要设置 7 个参数。

     

    1. public ThreadPoolExecutor(
    2. int corePoolSize,
    3. int maximumPoolSize,
    4. long keepAliveTime,
    5. TimeUnit unit,
    6. BlockingQueue workQueue,
    7. ThreadFactory threadFactory,
    8. RejectedExecutionHandler handler
    9. ) { 
    10. }

    corePoolSize

    核心线程数,线程池中始终存活的线程数。

    maximumPoolSize

    最大线程数,线程池中允许的最大线程数,当线程池的任务队列满了之后可以创建的最大线程数。

    keepAliveTime

    最大线程数可以存活的时间,当线程中没有任务执行时,最大线程就会销毁一部分,最终保持核心线程数量的线程。

    unit

    单位,用于设定线程的存活时间​。

    workQueue

    阻塞队列,用来存储线程池等待执行的任务,均为线程安全,包含以下 7 种类型:

    • ArrayBlockingQueue:一个由数组结构组成的有界阻塞队列。

    • LinkedBlockingQueue:一个由链表结构组成的有界阻塞队列。

    • SynchronousQueue:一个不存储元素的阻塞队列,即直接提交给线程不保持它们。

    • PriorityBlockingQueue:一个支持优先级排序的无界阻塞队列。

    • DelayQueue:一个使用优先级队列实现的无界阻塞队列,只有在延迟期满时才能从中提取元素。

    • LinkedTransferQueue:一个由链表结构组成的无界阻塞队列。与SynchronousQueue类似,还含有非阻塞方法。

    • LinkedBlockingDeque:一个由链表结构组成的双向阻塞队列。

    threadFactory

    线程工厂,主要用来创建线程,默认为正常优先级、非守护线程。

    handler

    拒绝策略,拒绝处理任务时的策略,包含以下几种类型:

    • AbortPolicy:拒绝并抛出异常,默认策略。

    • CallerRunsPolicy:使用当前调用的线程来执行此任务。

    • DiscardOldestPolicy:抛弃队列头部(最旧)的一个任务,并执行当前任务。

    • DiscardPolicy:忽略并抛弃当前任务。

     


     系列文章索引

    MyBatis的插件能在哪些地方进行拦截?

    了解MyBatis的缓存机制吗

    面试官:谈谈对volatile的理解

    Spring中用到了哪些设计模式

    面试官:说一下SQL的执行过程

    线程池的工作原理


     

  • 相关阅读:
    小程序毕设作品之微信体育馆预约小程序毕业设计成品(7)中期检查报告
    jvm调试工具arthas的watch命令记录函数参数和返回值案例
    Android 系统日志关键字
    Mysql5.7(Docker环境)实现主从复制
    VSCode + RemoteSSH实现虚拟机Linux下开发
    6. 【图的应用1】最⼩⽣成树(Prim、kruskal)、最短路径(BFS、Dijkstra、Floyd{含有快速求解})
    核心函数--少儿编程
    【java】【SSM框架系列】【二】SpringMVC
    mysql增加字段语句转为Oracle语句
    【附源码】计算机毕业设计JAVA学校食堂订餐管理
  • 原文地址:https://blog.csdn.net/feikillyou/article/details/134541610