zoukankan      html  css  js  c++  java
  • 线程池的4种拒绝策略

    1.ThreadPoolExecutor类实现了ExecutorService接口和Executor接口,可以设置线程池corePoolSize,最大线程池大小,AliveTime,拒绝策略等。常用构造方法
    ThreadPoolExecutor(int corePoolSize, int maximumPoolSize,
    long keepAliveTime, TimeUnit unit,BlockingQueue workQueue,
    RejectedExecutionHandler handler)

    corePoolSize: 线程池维护线程的最少数量
    maximumPoolSize:线程池维护线程的最大数量
    keepAliveTime: 线程池维护线程所允许的空闲时间
    (解释:当线程池的数量超过corePoolSize时,多余的空闲线程的存活时间。)
    unit: 线程池维护线程所允许的空闲时间的单位
    workQueue: 线程池所使用的缓冲队列
    handler: 线程池对拒绝任务的处理策略

    在这里插入图片描述
    handler有四个选择:

    策略1:ThreadPoolExecutor.AbortPolicy()
    抛出java.util.concurrent.RejectedExecutionException异常 ,示例如下:
    在这里插入图片描述
    小疑问:笔者对运行结果还是有一些疑问,为什么异常在下面第3行就出现了
    在这里插入图片描述

    策略2:ThreadPoolExecutor.CallerRunsPolicy
    用于被拒绝任务的处理程序,它直接在 execute 方法的调用线程中运行被拒绝的任务;如果执行程序已关闭,则会丢弃该任务。如下:(小疑问:笔者对运行结果还是有很多的疑问,比如pool-1-thread-7 is running连续出现了好多次,这是为什么呢?)
    在这里插入图片描述
    解释:上面zxai
    策略3:RejectedExecutionHandler handler =
    new ThreadPoolExecutor.DiscardOldestPolicy();
    这样运行结果就不会有100个线程全部被执行。处理源码如下:
    Java中Queue的一些常用方法:
    poll() 移除并返问队列头部的元素
    在这里插入图片描述
    解释:该策略将丢弃最老的一个请求,也就是即将被执行的一个任务,并尝试再次提交当前任务。(问:为什么是弹出队列的头元素呢?答:是因为队列的先进先出原则,所以队列的头元素肯定是最老的一个请求,而DiscardOldestPolicy策略就是把最老的请求废除,把这个机会(相当于抢了最老的请求的吃到嘴边的肉)留给当前新提交到线程池里面的线程(这个时候线程池已经满了,队列也已经满了,如果不满的话,也不会有拒绝策略了!))

    策略4:ThreadPoolExecutor.DiscardPolicy
    用于被拒绝任务的处理程序,默认情况下它将丢弃被拒绝的任务。
    运行结果也不会全部执行100个线程。
    源码如下,实际就是对线程不执行操作:
    在这里插入图片描述
    在这里插入图片描述

    原文地址:https://blog.csdn.net/qq_40241957/article/details/85468994
                                    </div>
  • 相关阅读:
    1024X768大图 (Wallpaper)
    (Mike Lynch)Application of linear weight neural networks to recognition of hand print characters
    瞬间模糊搜索1000万基本句型的语言算法
    单核与双核的竞争 INTEL P4 670对抗820
    FlashFTP工具的自动缓存服务器目录的功能
    LDAP over SSL (LDAPS) Certificate
    Restart the domain controller in Directory Services Restore Mode Remotely
    How do I install Active Directory on my Windows Server 2003 server?
    指针与指针变量(转)
    How to enable LDAP over SSL with a thirdparty certification authority
  • 原文地址:https://www.cnblogs.com/jpfss/p/11671127.html
Copyright © 2011-2022 走看看