效率
高并发是提高业务处理效率的有效手段,线程池(推荐ThreadPoolExecutor,其他newFixed,cached阻塞队列长度没约束,容易导致OOM)提供了将多个可独立互相不依赖的子任务并行处理,并可配置核心线程、最大、等待队列等,取代ThreadGroup
这里要特别注意,线程池当核心线程和队列满了才创建新的线程,直至达到Maxsize数量。缓冲队列设计是考虑任务波峰波谷情形,创建线程需要成本,优先考虑缓冲队列,紧急情况下创建线程,达到效益最大化”
硬件约束
当然并不是线程并发度越高,效率就越高。线程执行最终到CPU层面也是时间片调用,学过计算机原理的都清楚多核CPU及调度机制,几个core才能保证并行,单个core只能保证并发。
若是CPU密集型应用,线程池大小为CPU核心数+1
若是IO密集型应用,线程池大小设置为2N+1,原因也很简单,IO操作时有等待时间,此时可以让出计算资源给其他线程,即可以多处理些线程任务。
但上述只是理论情况,仅供参考,现实应用特别是微服务架构,会复杂很多。
并发组件
典型的BlockQueue 完全支持多线程并发,采用分段可重入锁机制。
concurrent包组件,具有高并发容错能力,但还是要加锁才能保证精度
Automic原子操作,高并发安全,但对象类型需要避免ABA问题。