我在代码中使用两种不同的方式在java中实现了Scheduler。但是,两者似乎都是顺序而非并行线程。我是java 8上的spring 4应用程序。
第一种方式
@Scheduled(cron = "0/59 * * * * *")
public void test2 (){
第二种方式
@Override
public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {
try{
taskRegistrar.addTriggerTask(
new Runnable() {
@Override public void run() {
try {
System.out.println("some configure task running every 10 seconds --" + new Date());
} catch (Exception e) {
}
}
},
new Trigger() {
@Override public Date nextExecutionTime(TriggerContext triggerContext) {
Calendar nextExecutionTime = Calendar.getInstance();
Date lastActualExecutionTime = triggerContext.lastActualExecutionTime();
nextExecutionTime.setTime(lastActualExecutionTime != null ? lastActualExecutionTime : new Date());
nextExecutionTime.add(Calendar.SECOND, 1000);
return nextExecutionTime.getTime();
}
}
);
两者都不能在并发模式下工作。这是工作中的巨大不一致。例如,我希望每100秒运行一次,永远不会每100秒启动一次。根据以前的工作完成情况,它可能会延迟超过3-4分钟。 有人可以指出一个更好的解决方案。感谢
我按照以下建议尝试了以下内容。
ConcurrentTaskScheduler scheduler = new ConcurrentTaskScheduler();
scheduler.schedule(new Runnable() {
@Override
public void run() {
System.out.println(new Date() +"start of test2 crons job running every 59 seconds test2 test2 test2");
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println(new Date() +"end of test2 crons job running every 59 seconds end end end ");
}
}, new CronTrigger("0/30 * * * * *"));
我创建了5个这样的作业并运行它们但它们仍然按顺序运行。我无法在这里找到我的错误,或者如果有人有任何代码片段或任何链接,我可以找到任何示例代码将非常有帮助。
答案 0 :(得分:0)
在Spring中,它取决于您使用的特定TaskExecutor
。您可以根据自己的情况选择其中几种。有关Spring提供的不同执行程序,请参阅https://docs.spring.io/spring/docs/current/spring-framework-reference/html/scheduling.html#scheduling-task-executor-types。