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

四种线程池:
1.newFixedThreadPool()方法:该方法返回一个固定线程数量的线程池。线程池中的线程数量始终不变,当新任务提交若有空闲线程则立即执行,没有,则新的任务会暂存在一个任务队列中,待有线程空闲时,便处理任务队列中的任务。
2.newSingleThreadExecutor()方法:该方法返回一个只有一个线程的线程池。该任务队列是一个先进先出的顺序执行队列。
3.newCachedThreadPool()方法:该方法返回一个根据实际情况调整线程数量的线程池。若所有线程均在工作,又有新的任务提交,则会创建新的线程处理任务,用完完毕放回线程池复用。
4.newScheduleThreadPool()方法:创建固定长度的线程池,且同时以延时或者定时的方法执行任务。

如何确定线程池大小(cpu密集型通常设置Ncpu+1,io密集型数量设置的应该更多)

并发库中的blockingqueue(阻塞队列),主要提供了两个方法put()和take()
前者将对象放到队列中,如果队列已满,就等待有空闲。后者从head取一个对象,如果没有对象就等到有对象。
FixedThreadPool与SingleThreadPool都是采用的无界linkedblockingqueue实现。linkedblockingqueue中引入了两把锁takelock和putlock,显然分别用于take操作和put操作。入队出队用不同锁,可以同时进行入队出队操作。由于其实链表,查找较慢。

CacheThreadPool使用的时synchronousqueue队列,该队列是一种直接提交队列。

线程池主要使用的队列分几种
有界队列
无界队列
直接提交队列
优先任务队列

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值