详解ExecutorService 和 Executors

代码示例:

  • ExecutorService 表⽰⼀个线程池实例.
  • Executors 是⼀个⼯⼚类, 能够创建出⼏种不同⻛格的线程池.

ExecutorService 的 submit ⽅法能够向线程池中提交若⼲个任务.

ExecutorService pool = Executors.newFixedThreadPool(10);
    pool.submit(new Runnable() {
        @Override
        public void run() {
            System.out.println("hello");
        }
    });

Executors 创建线程池的⼏种⽅式

  • newFixedThreadPool: 创建固定线程数的线程池
  • newCachedThreadPool: 创建线程数⽬动态增⻓的线程池.
  • newSingleThreadExecutor: 创建只包含单个线程的线程池.
  • newScheduledThreadPool: 设定 延迟时间后执⾏命令,或者定期执⾏命令. 是进阶版的 Timer.

Executors 本质上是 ThreadPoolExecutor 类的封装 

ThreadPoolExecutor 

ThreadPoolExecutor 提供了更多的可选参数, 可以进⼀步细化线程池⾏为的设定.  

ThreadPoolExecutor 的构造⽅法

把创建⼀个线程池想象成开个公司. 每个员⼯相当于⼀个线程 

  • corePoolSize: 正式员⼯的数量. (正式员⼯, ⼀旦录⽤, 永不辞退)
  • maximumPoolSize: 正式员⼯ + 临时⼯的数⽬. (临时⼯: ⼀段时间不⼲活, 就被辞退).
  • keepAliveTime: 临时⼯允许的空闲时间.
  • unit: keepaliveTime 的时间单位, 是秒, 分钟, 还是其他值.
  • workQueue: 传递任务的阻塞队列
  • threadFactory: 创建线程的⼯⼚, 参与具体的创建线程⼯作.

RejectedExecutionHandler: 拒绝策略, 如果任务量超出公司的负荷了接下来怎么处理.

  • AbortPolicy(): 超过负荷, 直接抛出异常.
  • CallerRunsPolicy(): 调⽤者负责处理
  • DiscardOldestPolicy(): 丢弃队列中最⽼的任务.
  • DiscardPolicy(): 丢弃新来的任务

 线程池的工作流程

  • 8
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值