调度任务串行配置?

cron4j 怎么控制任务的并发呢?针对于同一任务例如定时每分钟执行一次,但是这个任务某次可能要2分钟,怎么让下一次执行等待这次执行完了再开始 ,如注解:@DisallowConcurrentExecution

评论区

JFinal

2018-09-06 17:33

用一个 static boolean isRuning 变量控制一下,当这个变量为 true 时,自己直接退出本次调度

秦城诗雨

2018-09-07 17:02

@JFinal cron4j 调度任务的时候,每次调Runnable 方法是每次新实例化一个类还是单例的,如果不是单例的话,这个地方会有线程同步的问题,我直接把调用代码块 用synchronized控制并发可以吗?

JFinal

2018-09-08 12:47

@秦城诗雨 每次调用的 Runnable 是单例的,确实可以通过 synchronized 控制并发

但要注意一个问题,如果有很多次调度的时间间隔都小于处理时长,可能会同时有多个线程阻塞在 synchronized 这里

秦城诗雨

2018-09-10 09:12

@JFinal 好的,谢谢耐心解答

chcode

2019-10-18 17:26

@JFinal 如果这种情况频繁发生,是不是阻塞的线程越来越多

JFinal

2019-10-19 17:11

@chcode 线程为固定数量,这个是 cron4j 保障过的

chcode

2020-01-11 12:05

@JFinal static boolean isRuning 这样是不是也会有问题 多个线程同时对 isRuning 进行判断 导致都进行了执行

chcode

2020-01-11 16:10

@JFinal 我是使用ReentrantLock.tryLock去获取锁,如果没有获取到就直接结束本次任务

JFinal

2020-01-11 16:28

@chcode 并发问题自己处理好就行,这个本质是与 jfinal 无关的

热门反馈

扫码入社