浅谈JAVA高并发之线程池

效率

高并发是提高业务处理效率的有效手段,线程池(推荐ThreadPoolExecutor,其他newFixed,cached阻塞队列长度没约束,容易导致OOM)提供了将多个可独立互相不依赖的子任务并行处理,并可配置核心线程、最大、等待队列等,取代ThreadGroup

这里要特别注意,线程池当核心线程和队列满了才创建新的线程,直至达到Maxsize数量。缓冲队列设计是考虑任务波峰波谷情形,创建线程需要成本,优先考虑缓冲队列,紧急情况下创建线程,达到效益最大化”

硬件约束

当然并不是线程并发度越高,效率就越高。线程执行最终到CPU层面也是时间片调用,学过计算机原理的都清楚多核CPU及调度机制,几个core才能保证并行,单个core只能保证并发。
若是CPU密集型应用,线程池大小为CPU核心数+1
若是IO密集型应用,线程池大小设置为2N+1,原因也很简单,IO操作时有等待时间,此时可以让出计算资源给其他线程,即可以多处理些线程任务。
但上述只是理论情况,仅供参考,现实应用特别是微服务架构,会复杂很多。

并发组件

典型的BlockQueue 完全支持多线程并发,采用分段可重入锁机制。
concurrent包组件,具有高并发容错能力,但还是要加锁才能保证精度
Automic原子操作,高并发安全,但对象类型需要避免ABA问题。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值