线程池之阻塞队列及饱和策略

一 线程池的阻塞队列

1 SynchronousQueue 无缓冲阻塞队列:
该队列每个插入操作必须等待另一个线程进行相应的操作,本身不存储数据,只有当前一个线程删除时,后一个线程才能被删除。

2 ArrayBlokingQueue 有界阻塞队列:
遵循FIFO,队满进行插入时被阻塞,队空取也会阻塞,类似生产者消费者模式,相当于有界数据缓冲区,且在创建的时候需要指定容量,创建之后容量不会改变。不能保证线程访问队列的公平性,公平性时指等待时间最长的线程最先被访问。保证公平性,会降低吞吐量。

3 LinkedBlockingQueue 无界阻塞队列:
用链表实现有界阻塞队列,同样满足先进先出FIFO,与ArrayBlockingQueue相比吞吐量更大,但是无界性会使内存严重耗费,所以在创建时最好指定大小,如果未指定为Integer.value;

4 PriortyBlokingQueue 优先级无界阻塞队列:根据线程优先级决定哪个线程先被获取

二 饱和策略:当阻塞队列已满或指定线程已经开启,线程池主要采用四种饱和策略

1 AbortPolicy: 直接拒绝所提交的任务,并抛出RejectedExecutionException异常,
2 DiscardPolicy:拒绝提交的任务并且不抛出异常
3 DiscardOldestPolicy:抛弃当前阻塞队列中存放时间最久的任务,执行当前刚到来的任务再查询线程是否满了,没满放入阻塞队列,满了则继续丢弃当前存放最久的任务
4 CallerRunsPolicy:只用调用者的线程去执行任务

  • 0
    点赞
  • 0
    评论
  • 0
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值