线程池技术

线程池技术,第1张

线程池技术 线程池 线程池关键参数
    核心线程数:corePoolSize

创建了线程池后,默认情况下,线程池中并没有任何线程,而是等待有任务到来,才创建线程去执行任务,除了调用了prestartAllCoreThreads或者prestartCoreThread()方法,这两个方法是预创建线程的意思,即在没有任务到来之前就创建corePoolSize个线程或者一个线程,默认情况下,创建了线程池后,线程池中的线程数为0,当有任务来之后,就会创建一个线程去执行任务,当线程池中的线程数达到corePoolSize之后,就会把到达的任务放到缓冲队列当中。

    最大线程数:maximumPoolSize

线程池最大线程数,这个参数也是一个非常重要的参数,它表示在线程池中最多能创建多少个线程:在corePoolSize到maximumPoolSize的线程数会被自动释放,而小于corePoolSize的不会。

    keepAliveTime

表示线程没有任务执行时,最多保持多久时间会终止,默认情况下,只有当线程池中的线程数大于corePoolSize时,keepAliveTime才会起作用,直到线程池中的线程数不大于corePoolSize,即当线程池汇总的 线程数大于corePoolSize时,如果一个线程空闲时间达到keepAliveTime,则会终止,我知道线程池中的线程数不超过corePoolSize。但是如果调用了allwCoreThreadTimeOut(boolean)方法,在线程池中的线程数不大于corePoolSize时,keepalivetime参数也会起作用,直到线程池中的线程数为0

    TimeUnit unit

参数keepAliveTime的时间单位,一个JDK里面的时间单位枚举类

    BolockingQueue workQueue

    一个阻塞队列,用来存储等待执行的任务,这个参数的选择也很重要,会对线程池的运行过程产生重大影响。

    ThreadFactory threadFactory

线程工厂,主要用来创建线程,可以是一个自定义的线程工厂,默认是Executors.defaultThreadFatory(),用来在线程池里面创建线程。

    RejectedExecutionHandler handler

表示当拒绝处理任务时的策略,也说可以自定义的,有四种拒绝策略,默认是直接抛出异常AbortPolicy()

线程任务拒绝策略

不用线程池线程执行,只用调用者所在线程来运行任务 CallerRunsPolicy直接丢弃任务 DiscardPolicy直接抛出异常 AbortPolicy丢弃队列中最旧的任务,并执行当前任务 DiscardOldestPolicy

为什么要有拒绝策略:

假设:线程池有一个任务队列,用于缓存所有待处理的任务, 正在处理的任务将从任务队列中移出。因此,在任务队列长度有限的情况下,就会出现新任务的拒绝处理问题,需要一种策略来处理这种应该加入任务队列却因为队列已满无法加入的情况,此外,在线程池关闭的时候,也需要对任务加入队列 *** 作进行额外的 协调处理。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5719671.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存