场景
一次批量执行任务(12个),最后任务执行成功会批量上传图片,导致线程池都处于等待状态。
首先这个线程池是通过newSingleThreadExecutor
来创建的,并且在执行过程中,不会有新的任务进来,当时的情况是在线程执行过程中卡主,实际发生在上传图片,类似的线程池多大12个,每个线程上传的图片可能多大上百张。
分析
分析上面jstack打印的日志(打印方法是jstack pid
),有个waiting on condition
,它的含义,我搜了下,是这样的
由此可以猜测,可能是大并发上传图片导致网络拥塞
解决方法
做一个固定线程大小的线程池,比如3个,专门用于并发上传图片,避免网络拥塞。