java四种线程池的使用

《1》线程的状态:NEW(创建)、RUNNABLE(可运行)、BLOCKED(阻塞)、WAITING(等待)、TIMED_WAITING、TERMINATED(执行完毕)
    《2》常见的四种线程池:https://www.cnblogs.com/baizhanshi/p/5469948.html
    《3》参数原理讲解:https://www.cnblogs.com/kuoAT/p/6714762.html
        (1)corePoolSize 核心线程数,指保留的线程池大小(不超过maximumPoolSize值时,线程池中最多有corePoolSize 个线程工作)。 
        (2)maximumPoolSize 指的是线程池的最大大小(线程池中最大有corePoolSize 个线程可运行)。 
        (3)keepAliveTime 指的是空闲线程结束的超时时间(当一个线程不工作时,过keepAliveTime 长时间将停止该线程)。 
        (4)unit 是一个枚举,表示 keepAliveTime 的单位(有NANOSECONDS, MICROSECONDS, MILLISECONDS, SECONDS, MINUTES, HOURS, DAYS,7个可选值)。 
        (5)workQueue 表示存放任务的队列(存放需要被线程池执行的线程队列)。 
        (6)handler 拒绝策略(添加任务失败后如何处理该任务).
    《4》拒绝策略:https://blog.csdn.net/jgteng/article/details/54411423
        (1)AbortPolicy:丢掉这个任务并抛出RejectedExecutionException异常
        (2)DiscardPolicy:直接丢掉任务,没有任何反应
        (3)DiscardOldestPolicy:丢掉老的任务,没有任何反应
        (4)CallerRunsOlicy:主线程自己去执行这个任务
        (5)自定义:实现RejectedExecutionHandler接口
    《5》使用示例:https://www.cnblogs.com/yysbolg/p/7355800.html
    《6》运行策略
        (1)刚创建线程池时,里面没有线程;任务队列是作为参数传过来,即时队列里面
            有任务,也不会马上执行;
        (2)当调用excute()方法添加一个任务时,线程池会做如下判断:
            a、如果正在运行的线程数小于corePoolSize,那么马上创建线程运行这个任务;
            b、如果大于或等于corePoolSize,那么将这个任务加入队列;
            c、如果对列也满了,运行线程数小于maximumPoolSize,创建线程运行这个任务;
            d、对列满了,大于或等于maximumPoolSize,那么会拒绝这个任务;
        (3)当一个线程执行完了,会从队列中去下一个任务来执行;
        (4)当一个线程无事做,超过keepAliveTime是,线程会判断,如果当前运行数大于
            corePoolSize,那么这个任务被停掉,所以线程的所有任务完成后,它最终收缩到
            corePoolSize的大小;
        例子:这个过程说明,并不是先加入任务就一定会先执行。假设队列大小为 4,corePoolSize为2,
            maximumPoolSize为6,那么当加入15个任务时,执行的顺序类似这样:首先执行任务 1、2,
            然后任务3~6被放入队列。这时候队列满了,任务7、8、9、10 会被马上执行,而任务 11~15 
            则会抛出异常。最终顺序是:1、2、7、8、9、10、3、4、5、6。当然这个过程是针对指定大
            小的ArrayBlockingQueue<Runnable>来说,如果是LinkedBlockingQueue<Runnable>,因为该队列
            无大小限制,所以不存在上述问题

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值