线程池实现有哪些?FixedThreadPool底层用的是什么任务队列?

阿里巴巴强制不让使用Executors创建,使用ThreadPoolExecutor创建。Executors返回线程池对象弊端如下:

FixedThreadPoolSingleThreadExecutor:允许请求队列最大长度为Integer.MAX_VALUE,导致OOM;CachedThreadPoolScheduledThreadPool:允许创建线程的最大数量为Integer.MAX_VALUE,导致OOM。 

并发库中有个类是BlockingQueue,就是阻塞队列,这个类提供了两个方法,put()和take(),前者是将对象放到队列里,如果没有空闲节点了,就等待,后者是从头拿对象,如果没有对象了就等到有。FixedThreadPool和SingleThreadExecutor都是采用无界的LinkedBlockingQueue,LinkedBlockingQueue中引入了两把锁,takeLock和putLock,分别用于take和put操作,因为入队和出队用的不同的锁,所以这个队列可以同时入队和出兑。

线程池对队列的三种状态:无界队列、有界队列、同步移交。

无界队列:请求无限增加,队列也会无限增加,会导致资源耗尽。

                          

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值