线程池的拒绝策略

线程池:

线程池是一种多线程处理形式,处理过程中将任务添加到队列,然后在创建线程后自动启动这些任务。线程池线程都是后台线程。

ThreadPoolExecutor构造方法:

public ThreadPoolExecutor(int corePoolSize,
                              int maximumPoolSize,
                              long keepAliveTime,
                              TimeUnit unit,
                              BlockingQueue<Runnable> workQueue,
                              ThreadFactory threadFactory,
                              RejectedExecutionHandler handler)

参数释义:

        corePoolSize:一个int类型参数,用于指定核心线程数量

        maximumPoolSize:一个int类型参数,用于指定最大线程数量

        keepAliveTime:long类型参数,用于指定空闲时间

        unit:用于指定空闲时间的单位

        workQueue:阻塞队列

        threadFactory:线程工厂

        handler:拒绝策略

线程池的执行:

        1.首先在每次接受任务时,线程池才会启动一个线程去执行(也就是线程池刚创建时是不会启动线程的)

        2.启动线程时,会先启用核心线程,直到达到初始化时指定的核心线程数

        3.达到核心线程数后,再接受的任务会被保存至阻塞队列中

        4.当阻塞队列也存满后,多出的任务会继续启用线程执行,直到达到最大线程数

        5.达到最大线程数后,再接受的任务就会执行拒绝策略

        6.当超出核心线程的线程空闲时间达到了指定的空闲时间时,超出的线程会被销毁

拒绝策略:

    1. 当客户端提交的任务被拒绝时,线程池所关联的RejectedExecutionHandlerrejectedExecution方法会被线程池调用。
    2.ThreadPoolExecutor自身提供了几个现成的RejectedExecutionHandler接口的实现类。其中ThreadPoolExecutor.AbortPolicy是ThreadPoolExecutor使用的默认RejectedExecutionHandler。
    3. 如果默认的RejectedExecutionHandler(它会直接抛出异常)无法满足要求,那么我们可以优先考虑ThreadPoolExecutor自身提供的其他RejectedExecutionHandler,其次才去考虑使用自身实现的

RejectedExecutionHandler接口常用实现类

        

AbortPolicy:(默认)

        会直接抛出异常

        构造方法:

public AbortPolicy()

DiscardPolicy:

        丢弃当前被拒绝的任务(而不抛出任何异常)

             构造方法:

public DiscardPolicy()

DiscardOldestPolicy:

        将工作队列中最老的任务丢弃,然后重新尝试接纳被拒绝的任务

        构造方法:

public DiscardOldestPolicy()

CallerRunsPolicy:

        在客户端线程中执行被拒绝的任务

        构造方法:

 public CallerRunsPolicy() 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值