目前,我正在使用弹簧石英在不同时间点燃三种不同的工作。我为每个触发器使用三个不同的调度程序。 这种情况在前几个小时工作正常,但随后所有石英线都被阻塞。以下是我的bean定义:
> <!-- TRAFFIC POLLER DECLERATION -->
> <!-- job -->
> <bean id="TriggerJob" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
> <property name="targetObject" ref="TriggerClass" />
> <property name="targetMethod" value="trigger" />
> </bean>
>
> <!-- trigger -->
> <bean id="trigger1" class="org.springframework.scheduling.quartz.CronTriggerBean">
> <property name="jobDetail" ref="TriggerJob" />
> <property name="cronExpression" value="${trigger.cron}" />
> </bean>
>
> <!-- SCHEDULER -->
> <bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
> <property name="waitForJobsToCompleteOnShutdown" value="true" />
> <property name="triggers">
> <list>
> <ref bean="trigger1" />
> </list>
> </property>
> </bean>
以下是我的jconsole阻塞线程的堆栈跟踪:
Name: org.springframework.scheduling.quartz.SchedulerFactoryBean#1_Worker-5
State: BLOCKED on java.lang.Object@131b502 owned by: org.springframework.scheduling.quartz.SchedulerFactoryBean#1_Worker-6
Total blocked: 20 Total waited: 101,919
Stack trace:
com.ecs.Trigger.TriggerClass trigger(TriggerClass.java:89)
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
java.lang.reflect.Method.invoke(Method.java:597)
org.springframework.util.MethodInvoker.invoke(MethodInvoker.java:273)
org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean$MethodInvokingJob.executeInternal(MethodInvokingJobDetailFactoryBean.java:264)
org.springframework.scheduling.quartz.QuartzJobBean.execute(QuartzJobBean.java:86)
org.quartz.core.JobRunShell.run(JobRunShell.java:216)
org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:549)
任何人都知道我为什么这么做?提前谢谢。
答案 0 :(得分:0)
似乎在工作中(org.springframework.scheduling.quartz.SchedulerFactoryBean#1_Worker-5)正在与另一个org.springframework.scheduling.quartz.SchedulerFactoryBean#1_Worker-6同步并正在等待这个用于释放a资源。 你的工作中有一些wait()/ notify()指令吗? 或者你是否在某个变量上同步了同一个工作而你没有在你的TriggerJob中设置? 您没有设置concurrent = false,因此可能是同一作业上的两个实例正在运行,而另一个正在等待在另一个线程中执行的相同作业。