1
目前,我使用弹簧石英在不同时间点燃三种不同的工作。我为每个触发器使用三个不同的调度器。 这种情况在前几个小时工作良好,但随后所有石英线都被堵塞。以下是我的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 [email protected] 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)
任何人都得到了,为什么我有这个什么想法?提前致谢。
被调用的方法是同步的,没有共享变量或通知/等待。这些方法是完全独立的。 – Tzer001
这些方法是从除工作之外的其他线程调用的? – Giovanni