ThreadPoolTaskExecutor 队列有什么用
2023-05-01 本文已影响0人
青玉_f18c
ThreadPoolTaskExecutor 有三个核心参数:
- corePoolSize
- maxPoolSize
- queueCapacity
前两个不必说,大家都知道干啥用,这里说下queue size的两个设计用途
- 缓存:大量任务的突发提交,促使线程池创建工作线程,然而这些线程很快可能又销毁了;起到任务流的削峰填谷的作用。
- 公平:提供默认的FIFO策略
两个典型的使用场景
- 高并发(实时性高的场景),注意这里推荐设置成0,因为0时使用乐观锁的同步,加上非公平的策略策略加持,效率很高;
queueCapacity=0
错误的使用:队列设置太小,由于线程池使用的是LinkedBlockingQueue,造成工作线程对队列的竞争效应;如果设置过大,在流量攀升过程中,任务在队列的排队时间过长,同样任务整体时间变长=排队时间+执行时间 - 缓存刷新(实时性低的场景),建议core 和 max都设置小一点,queue 尽量设置的大一点;因为刷新要求的实时性不高;可以最大限度的利用资源;