1、Spring的线程池定义如下
<bean id="threadPoolExecutor"
class="org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor">
<property name="corePoolSize" value="3"/>
<property name="maxPoolSize" value="50"/>
<property name="queueCapacity" value="300"/>
</bean>
2、如果服务端有多个业务A,B公用线程池,如果A,B没有相互依赖,则没啥问题,一旦A,B 有依赖,则可能出现系统挂住。
因为可能线程池被A请求占满,A请求依赖B,而B一直在排队,所以出现死循环。
3、需要启动一个线程对线程池进行监控,保证线程池健康的执行。(重要)比如可以打印日志,然后在可视化
如果解决这种问题
将线程池进行隔离,创建多个线程池。
线程池的调度很消耗CPU,因此可以根据业务需求而选择合理的使用线程池。