不当使用quartz度出现waiting on condition不完全解决思路

最近发现个问题,不知道是使用不当还是何种原因造成的。

具体内容:

     用Quartz调度任务,周期10分钟。但具体业务执行的时间要大于10分钟。Quartz线程池的配置是缺省,查了一下10个大小。

现象,运行一段时间后,Quartz的线程池中9个线程的状态是Waiting on Condition,一个是runnable。整进程的状态貌似停住了,调度时间到了,没有执行高度线程中的代码。

   

     怀疑,由于业务操作的时候大于10分钟(调度周期),可能会导致(猜的)Quartz的线程池中的线程还在处理业务,一次调度结束但实际业务操作还在运行(指在调度的线程池中运行),运行一段时间后这样的线程变多,导致无法响应下一次调度。

 

    解决办法,目前设想的是,具体的业务,在另一个线程池中完成而不使用Quartz的线程池做具体业务操作,每一次调度线程只把任务放到具体执行线程池中,就结束。

 

    继续上面说的,把一个实际基于FTP的文件定时扫描发送程序按上述思路调整了下。

 

调整前:

 

调度执行内容:

1.扫述表找到要转发的文件到LIST

2.遍历LIST,顺序发送文件。

 

调整后:

 

调度执行内容:

1.扫述表找到要转发的文件到LIST

2.遍历LIST,以每个元素构造转发Thread并提交到线程池。(或者设个最大转发数来控制同时转发的数量)

 

最后的结论不知道是否正确,业务操作时间较长的话,不要在调试本身的线程池中做。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值