线程池中的坑

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,因此可以根据业务需求而选择合理的使用线程池。

猜你喜欢

转载自blog.csdn.net/u011955252/article/details/81191167