关于spring定时任务的并发问题

原帖地址:http://nesuk.iteye.com/blog/1582557


关于Spring集成Quartz的concurrent属性 


以前经常在任务调度程序中使用Spring集成的Quartz,这种方式可以用简单的声明式配置即可实现定时任务,并结合了Spring自身的Bean的管理功能,非常方便。配置样本如下: 

        <!-- 要调用的工作类 -->
        <bean id="webStart" class="com.quartz.webStart"></bean>
        <!-- 定义调用对象和调用对象的方法 -->
        <bean id="jobtask1" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
            <!-- 调用的类 -->
            <property name="targetObject">
                <ref bean="webStart"/>
            </property>
            <!-- 调用类中的方法 -->
            <property name="targetMethod">
                <value>start1</value>
            </property>
            <property name="concurrent">  
        	<value>false</value>  
    	    </property>
        </bean>
         <!-- 定义触发时间 -->
        <bean id="doTime1" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
            <property name="jobDetail">
                <ref bean="jobtask1"/>
            </property>
            <!-- cron表达式 --><!-- 秒  分  时  日  月  周  年    0 0/10 * * * ?-->
            <property name="cronExpression" value="0 0/2 * * * ?">
            </property>
        </bean>
        <!-- 总管理类 如果将lazy-init='false'那么容器启动就会执行调度程序  -->
        <bean id="startQuertz" lazy-init="false" autowire="no" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
            <property name="triggers">
                <list>
                    <ref bean="doTime1"/>
                </list>
            </property>
        </bean>



其中concurrent属性标识的解释为:对于相同的JobDetail,当指定多个Trigger时, 很可能第一个job完成之前,第二个job就开始了。指定concurrent设为false,多个job不会并发运行,第二个job将不会在第一个job完成之前开始。 

那么此处的第二个job到底是被推迟执行了,还是被取消了呢? 今天带着这个疑问做了一个小实验,具体做法如下:将任务的Trigger设置为每10秒钟执行一次,然后在执行的任务体内让Thread暂停15秒钟,这样不同的job之间肯定会有时间上的重叠。当启动程序之后,发现前一个job执行结束的时刻的秒数为15,而且第二个本来在10s就执行的job马上就启动了。 

由此可见,concurrent属性实际是将job推迟执行了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值